You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure AD用户声明中无法显示用户组的问题求助

Azure MVC应用无法获取Azure AD用户组声明的排查方案

以下是针对你遇到问题的具体排查和解决步骤:

1. 补全令牌配置的组类型选择

在Azure门户的应用注册 > 令牌配置 > 组声明中,仅添加组声明是不够的,必须明确勾选要包含的组类型(安全组、Microsoft 365组),并选择返回格式(组ID或组名称)。如果未选择具体类型,令牌中不会生成groups条目。

2. 处理组数量超限的场景

Azure AD对ID令牌中直接返回的组数量有默认上限(150个),若用户所属组超过该数量,ID令牌中将不再包含groups声明。此时必须通过Microsoft Graph API主动获取用户组:

  • 先在应用注册中添加GroupMember.Read.All委托权限,并完成管理员同意
  • 在代码中注入GraphServiceClient调用API:
using Microsoft.Graph;

public async Task<List<Group>> GetUserGroups(GraphServiceClient graphClient)
{
    var groups = await graphClient.Me.MemberOf.Request().GetAsync();
    return groups.CurrentPage.OfType<Group>().ToList();
}

3. 显式配置OpenID Connect保留groups声明

默认情况下,Microsoft Identity Web可能会过滤部分声明,需在Program.cs中显式配置保留groups:

builder.Services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
    .AddMicrosoftIdentityWebApp(builder.Configuration.GetSection("AzureAd"))
    .AddOpenIdConnect(options =>
    {
        // 映射groups声明
        options.ClaimActions.MapJsonKey("groups", "groups");
        // 确保不忽略groups声明
        options.TokenValidationParameters.ClaimsToIgnore.Remove("groups");
    });

4. 清除令牌缓存并重新登录

旧的令牌缓存可能导致新配置不生效,需:

  • 清除浏览器缓存或使用隐私窗口重新登录
  • 注销当前用户后重新发起认证流程

5. 验证API权限的授予状态

确认GroupMember.Read.All权限已完成管理员同意:在应用注册>API权限中,该权限的状态应为“已授予[租户名]管理员同意”,而非“需要管理员同意”。

6. 检查声明的实际类型

部分场景下,groups声明的类型并非groups,而是带完整命名空间的格式(如http://schemas.microsoft.com/ws/2008/06/identity/claims/groups)。可在页面中输出所有声明确认:

@foreach(var claim in User.Claims)
{
    <p>@claim.Type: @claim.Value</p>
}

内容的提问来源于stack exchange,提问作者NibblyPig

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 08:40:32