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

咨询:身份验证后获取外部用户JWT令牌中的应用角色

解决外部来宾用户JWT令牌缺失角色的问题

1. 修改Azure AD应用程序清单开启角色声明

来宾用户的roles声明默认不会自动包含在ID/访问令牌中,需要手动配置应用清单:

  • 登录Azure门户,找到对应应用注册,进入清单标签。
  • 找到optionalClaims节点,添加或更新idToken和accessToken的配置,确保包含roles:
"optionalClaims": {
    "idToken": [
        {
            "name": "roles",
            "source": null,
            "essential": false,
            "additionalProperties": []
        }
    ],
    "accessToken": [
        {
            "name": "roles",
            "source": null,
            "essential": false,
            "additionalProperties": []
        }
    ]
}
  • 保存清单,等待配置生效(通常几分钟)。

2. 确认角色分配的有效性

  • 确保角色是分配给来宾用户本人,或是包含来宾用户的安全组(Office 365组无法同步角色到令牌)。
  • 检查企业应用的用户和组列表,确认来宾用户/所属安全组已被分配External.Only角色,状态为启用。

3. 配置.NET Core API的令牌解析

在API的Program.cs中,确保身份验证服务正确识别roles声明:

builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
    .AddMicrosoftIdentityWebApi(builder.Configuration.GetSection("AzureAd"))
    .EnableTokenAcquisitionToCallDownstreamApi()
    .AddInMemoryTokenCaches();

// 显式指定角色声明类型,避免解析异常
builder.Services.Configure<JwtBearerOptions>(JwtBearerDefaults.AuthenticationScheme, options =>
{
    options.TokenValidationParameters.RoleClaimType = "roles";
});

4. 检查前端MSAL的权限请求配置

Angular前端使用MSAL时,确保请求的令牌包含API的正确权限范围:

  • 在MSAL配置的protectedResourceMap中,指定API对应的权限范围(需提前在Azure AD应用注册中配置为委派权限并完成管理员同意):
export const protectedResourceMap = new Map([
    ['https://your-api-endpoint', ['api://your-api-client-id/access_as_user']]
]);
  • 登录请求必须包含上述权限范围,否则访问令牌不会携带角色信息。

5. 强制刷新会话验证

如果以上配置都正确但令牌仍无角色:

  • 让外部用户清除浏览器缓存后重新登录。
  • 在Azure AD中找到该来宾用户,进入会话页面强制注销现有会话,再重新登录。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 03:20:22