从Azure Active Directory授权用户

时间:2017-09-27 11:02:50

标签: asp.net azure asp.net-core-mvc azure-active-directory asp.net-authorization

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

enter image description here] 1

现在,身份验证工作正常。这两种用途都可以完美地登录WebApp。不起作用的是对单独的用户使用单独的权限/视图授权。在家庭控制器中,我正在尝试做类似的事情:

if(User.IsInRole('Admin')
 return View("HomePageAdmin");
else
 return View("NormalHomePage");

然而,它不起作用。对于这两个用户,它重定向到相同的“NormalHomePage”。

我错过了什么?

3 个答案:

答案 0 :(得分:2)

Azure AD角色与应用程序中的角色不同。你应该看一下这个样本:https://github.com/Azure-Samples/active-directory-dotnet-webapp-roleclaims

您必须先在应用清单中定义应用中的角色。

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

答案 1 :(得分:1)

因此,经过大量的研究和搜索,通过AAD实现ASP.NET Core 2.0的AuthN实现方式相当简单。

  • 我必须在AAD中创建一个新组,给它一个名字(" ShopAdmin",在我的情况下),然后只需添加我想给予管理员权限的用户。
  • 打开WebApp的清单文件,更新" groupMembershipClaims"字段从 null 到" SecurityGroup"
  • 再次从AAD打开组并从那里复制OBJECT ID。我们将在控制器的C#代码中使用此OBJECT ID。

-

enter image description here

  • 所以,既然我们已经创建了所需的组(或组,根据您的需要),从AAD更新了WebApp的清单文件,复制了组的OBJECTID,现在它&# 39;是时候在Controller中简单地使用OBJECTID了。在我的情况下,只需完成:

  • public bool CheckIfAdmin() { if (User.Claims.FirstOrDefault(c => c.Type == "groups" && c.Value.Equals("42f51be8-28c4-995d-a69f-f6f42f96a5cd", StringComparison.CurrentCultureIgnoreCase)) != null) return true; else return false; }

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

答案 2 :(得分:0)

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

https://github.com/Azure-Samples/active-directory-dotnet-webapp-roleclaims/blob/master/WebApp-RoleClaims-DotNet/App_Start/Startup.Auth.cs

一个也有帮助的问题:Azure Ad Returning Roles in Claims but User.IsInRole returns false