我已经在azure门户上创建了一个用于aad身份验证的组。我想要一个不在两个组中(但在AAD中存在)的用户-甚至不能登录该站点。我正在使用asp.net核心作为后端
答案 0 :(得分:0)
如果要配置应用程序以接收团体索赔,则需要在清单文件中将“ groupMembershipClaims”值设置为SecurityGroup
。
在“应用程序注册”门户上的应用程序设置页面中,单击“清单”以打开嵌入式清单编辑器。
通过找到“ groupMembershipClaims”设置并将其值设置为“ SecurityGroup”来编辑清单。
保存清单。
{
...
"errorUrl": null,
"groupMembershipClaims": "SecurityGroup",
...
}
为应用程序启用组声明后,Azure AD在JWT和SAML令牌中包括一个声明,其中包含用户所属的所有组的对象标识符(objectId),包括传递组成员身份。
但是请注意,要确保令牌大小不超过HTTP 标头大小限制,Azure AD限制了它的objectId数量 包括在团体索赔中。如果用户是多个组的成员 超额限制(SAML令牌为150,JWT令牌为200),然后 Azure AD不会发出令牌中的组声明。相反,它 在令牌中包含超额索偿要求,以表明 应用程序以查询Graph API来检索用户的组 成员资格。有关更多详细信息,请参阅blog。
所以您需要执行一些步骤:
检查其中一个值为组的索赔_claim_names。这表明超量了。
如果找到,请调用_claim_sources中指定的端点以获取用户组。
如果未找到,请查看用户所属组的组声明。
当然,您可以使用group claims
关于如何基于该组进行授权,可以通过ASP.NET Core中间件库来实现。通过在RoleClaimType
的{{1}}属性中指定声明,asp.net中间件支持从声明填充的角色。由于TokenValidationParameters
声明包含的安全组的对象ID比实际名称要多,因此您将使用组ID而不是组名。有关更多详细信息,请参阅sample。
Startup.cs
groups
然后使用它
// The following lines code instruct the asp.net core middleware to use the data in the "groups" claim in the Authorize attribute and User.IsInrole()
// See https://docs.microsoft.com/en-us/aspnet/core/security/authorization/roles?view=aspnetcore-2.2 for more info.
services.Configure<OpenIdConnectOptions>(AzureADDefaults.OpenIdScheme, options =>
{
// Use the groups claim for populating roles
options.TokenValidationParameters.RoleClaimType = "groups";
});
答案 1 :(得分:0)
我假设您要使用Azure AD上的ASP.NET Core进行AD身份验证。
如果使用的是ASP.NET Core 2.1或更高版本,最简单的方法是针对Azure AD使用OpenID的OAuth2.0 / OIDC流。 Azure AD还支持SAML 2.0,而不仅仅是OAuth2.0 / OIDC。
Microsoft建议在Azure AD上使用OAuth2.0,因为它比在Azure AD上实现SAML 2.0更加容易学习和实现。
Microsoft提供了一个示例应用程序,该程序使用ASP.NET Core通过使用特定的库来帮助访问Azure AD身份验证来演示对Azure AD的身份验证,它称为Microsoft Identity Platform(以前称为MSAL 2.0)。
软件开发人员的Azure AD身份概述可在以下位置找到: official MS Docs page of Azure AD's Microsoft Identity Platform
有关在Azure AD中对用户进行身份验证的示例应用程序的列表,请访问: landing page of various Microsoft Identity Platform code samples
注释:
答案 2 :(得分:0)
您可以在Azure AD中使用groups claims
,在天蓝色门户中配置应用程序以通过编辑清单来接收组声明:
{
...
"errorUrl": null,
"groupMembershipClaims": "SecurityGroup",
...
}
从Azure AD发出的 ID令牌将在groups
声明中包括当前用户的组ID列表,然后在asp.net核心应用程序(例如3.0)中,您可以通过以下方式限制访问:
services.AddControllersWithViews(options =>
{
var policy = new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser().RequireClaim("groups", "YourGroupID")
.Build();
options.Filters.Add(new AuthorizeFilter(policy));
});
注意:来自document:
如果用户属于超过超出限制的组的更多成员(SAML令牌为150,JWT令牌为200),则Microsoft身份平台不会在令牌中发出组声明。相反,它在令牌中包含超额声明,该声明指示应用程序查询Graph API以检索用户的组成员身份。