Asp.net 从Azure Active Directory授权用户
我已经设置了一个ASP.NET MVC核心项目,在创建该项目时,我选择了Azure AD身份验证选项。我已将两个用户添加到默认Azure广告中。一个在目录角色“全局管理员”中,另一个在目录角色“用户”。[请参阅下面的图片,以了解全局管理员的示例] ] 现在,身份验证工作正常。这两种用法都可以完美地登录到WebApp。不起作用的是对不同用户的不同权限/视图使用授权。在Home Controller中,我尝试执行以下操作: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
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; }
- 因此,在这里,基本上用户属性的声明集合用于检查它是否包含相应的组声明