使用Azure Active Directory进行身份验证

时间:2019-11-29 05:11:40

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

我已经在azure门户上创建了一个用于aad身份验证的组。我想要一个不在两个组中(但在AAD中存在)的用户-甚至不能登录该站点。我正在使用asp.net核心作为后端

3 个答案:

答案 0 :(得分:0)

如果要配置应用程序以接收团体索赔,则需要在清单文件中将“ groupMembershipClaims”值设置为SecurityGroup

  1. 在“应用程序注册”门户上的应用程序设置页面中,单击“清单”以打开嵌入式清单编辑器。

  2. 通过找到“ groupMembershipClaims”设置并将其值设置为“ SecurityGroup”来编辑清单。

  3. 保存清单。

    {
      ...
      "errorUrl": null,
      "groupMembershipClaims": "SecurityGroup",
      ...
    }

为应用程序启用组声明后,Azure AD在JWT和SAML令牌中包括一个声明,其中包含用户所属的所有组的对象标识符(objectId),包括传递组成员身份。

  

但是请注意,要确保令牌大小不超过HTTP   标头大小限制,Azure AD限制了它的objectId数量   包括在团体索赔中。如果用户是多个组的成员   超额限制(SAML令牌为150,JWT令牌为200),然后   Azure AD不会发出令牌中的组声明。相反,它   在令牌中包含超额索偿要求,以表明   应用程序以查询Graph API来检索用户的组   成员资格。有关更多详细信息,请参阅blog

enter image description here

所以您需要执行一些步骤:

  
      
  1. 检查其中一个值为组的索赔_claim_names。这表明超量了。

  2.   
  3. 如果找到,请调用_claim_sources中指定的端点以获取用户组。

  4.   
  5. 如果未找到,请查看用户所属组的组声明。

  6.   

当然,您可以使用group claims

直接呼叫Microsoft Graph API退出当前用户的组,而无需

关于如何基于该组进行授权,可以通过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

注释:

  1. 必须首先注册您的Web应用程序,才能对Azure AD进行身份验证。
  2. 您的Web应用程序不能使用OAuth2.0的“资源所有者”授予模型,该模型将用户名和密码直接传递给Azure AD,因为Web应用程序必须显示同意屏幕才能登录到Azure AD。

答案 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以检索用户的组成员身份。