从 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 是否公开了正确的声明?
查看索赔授权的工作设置。
一个也有帮助的问题: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;
}
所以,在这里,基本上是使用用户 属性 的声明集合来检查它是否包含相应的组声明。
我已经设置了一个 ASP.NET MVC 核心项目,并且在创建该项目时我选择了 Azure AD 身份验证选项。我已将两个用户添加到默认 Azure AD。一个在目录角色 "Global Administrator" 中,另一个在目录角色 "User" 中。 [全局管理员参考下图]
现在,身份验证工作正常。这两种使用都可以完美登录WebApp。不起作用的是为单独的用户使用单独的 permissions/views 授权。在家庭控制器中,我正在尝试做类似的事情:
if(User.IsInRole('Admin')
return View("HomePageAdmin");
else
return View("NormalHomePage");
然而,它不起作用。对于这两个用户,它重定向到相同的 "NormalHomePage".
我错过了什么?
没有更多信息很难判断。 您的 JWT 是否公开了正确的声明? 查看索赔授权的工作设置。
一个也有帮助的问题: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; }
所以,在这里,基本上是使用用户 属性 的声明集合来检查它是否包含相应的组声明。