从 Azure Active Directory 授权用户

Authorizing users from Azure Active Directory

我已经设置了一个 ASP.NET MVC 核心项目,并且在创建该项目时我选择了 Azure AD 身份验证选项。我已将两个用户添加到默认 Azure AD。一个在目录角色 "Global Administrator" 中,另一个在目录角色 "User" 中。 [全局管理员参考下图]

]1

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

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

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

我错过了什么?

没有更多信息很难判断。 您的 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

Azure AD 角色与您的应用程序中的角色不同。您可能应该看看这个示例:https://github.com/Azure-Samples/active-directory-dotnet-webapp-roleclaims

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

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

因此,经过大量查找和搜索,通过 AAD 为 ASP.NET Core 2.0 实现 AuthN 的方法非常简单。

  • 我必须在 AAD 中创建一个新组,为其命名("ShopAdmin",在我的例子中),然后简单地添加我想要授予管理员权限的用户。
  • 打开 WebApp 的 menifest 文件,将 "groupMembershipClaims" 字段从 null 更新为 "SecurityGroup"
  • 再次从 AAD 打开组并从那里复制 OBJECT ID。我们将在控制器的 C# 代码中使用此 OBJECT 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) return true; else return false; }

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