Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 从Azure Active Directory授权用户_Asp.net_Azure_Asp.net Core Mvc_Azure Active Directory_Asp.net Authorization - Fatal编程技术网

Asp.net 从Azure Active Directory授权用户

Asp.net 从Azure Active Directory授权用户,asp.net,azure,asp.net-core-mvc,azure-active-directory,asp.net-authorization,Asp.net,Azure,Asp.net Core Mvc,Azure Active Directory,Asp.net Authorization,我已经设置了一个ASP.NET MVC核心项目,在创建该项目时,我选择了Azure AD身份验证选项。我已将两个用户添加到默认Azure广告中。一个在目录角色“全局管理员”中,另一个在目录角色“用户”。[请参阅下面的图片,以了解全局管理员的示例] ] 现在,身份验证工作正常。这两种用法都可以完美地登录到WebApp。不起作用的是对不同用户的不同权限/视图使用授权。在Home Controller中,我尝试执行以下操作: if(User.IsInRole('Admin') return View

我已经设置了一个ASP.NET MVC核心项目,在创建该项目时,我选择了Azure AD身份验证选项。我已将两个用户添加到默认Azure广告中。一个在目录角色“全局管理员”中,另一个在目录角色“用户”。[请参阅下面的图片,以了解全局管理员的示例]

]

现在,身份验证工作正常。这两种用法都可以完美地登录到WebApp。不起作用的是对不同用户的不同权限/视图使用授权。在Home Controller中,我尝试执行以下操作:

if(User.IsInRole('Admin')
 return View("HomePageAdmin");
else
 return View("NormalHomePage");
但是,它不起作用。对于这两个用户,它重定向到同一个“正常主页”


我遗漏了什么?

没有进一步的信息很难说。 您的JWT是否公开了正确的声明? 看看索赔授权的工作设置


还有一个问题可能会有所帮助:

Azure AD角色与应用程序中的角色不同。您可能应该看看这个示例:

您必须首先在应用程序清单中定义应用程序中的角色


然后将用户分配给他们。一旦你做了这两件事,你得到的JWT中就会有一个称为“角色”的声明,其中包含用户的角色。

因此,经过大量查找和搜索,通过AAD for ASP.NET Core 2.0实现AuthN的方法变得相当简单

  • 我必须在AAD中创建一个新组,给它一个名称(“ShopAdmin”,在我的例子中),然后简单地添加我想要授予管理员权限的用户
  • 打开WebApp的menifest文件,将“groupMembershipClaims”字段从null更新为“SecurityGroup”
  • 从AAD再次打开组,并从中复制对象ID。我们将在控制器的C#代码中使用此对象ID
--

  • 因此,现在我们已经创建了所需的组(或者,组,根据您的需要),从AAD更新了WebApp的清单文件,复制了组的OBJECTID,现在是在控制器中简单使用该OBJECTID的时候了。在我的例子中,这只是简单地通过以下方式完成:

  • public bool CheckIfAdmin()
    {
    if(User.Claims.FirstOrDefault)(c=>c.Type==“groups”&&
    c、 Value.Equals(“42f51be8-28c4-995d-a69f-f6f42f96a5cd”,StringComparison.CurrentCultureIgnoreCase))!=null)
    返回true;
    其他的
    返回false;
    }

  • 因此,在这里,基本上用户属性的声明集合用于检查它是否包含相应的组声明


好吧,这是一篇很酷的文章,对于ASP:NET MVC Core 2.0不太管用