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

已配置对应声明,如何从Azure AD JWT Claims中获取用户的名与姓?

解决Azure AD JWT令牌无法获取given_name和family_name的问题

先确认令牌是否包含目标声明

先排查解码后的JWT里实际有没有这两个字段,避免是配置未生效:

// 遍历输出所有声明,检查given_name和family_name是否存在
foreach (var claim in decodedeIdtoken.Claims)
{
    Console.WriteLine($"{claim.Type}: {claim.Value}");
}

如果输出里没有这两个字段,先核对Azure配置:

  • 确认在应用注册 > 令牌配置中,已添加given_name和family_name可选声明,且勾选了ID令牌选项
  • 检查应用权限,确保已添加User.Read委托权限并完成管理员同意(企业应用场景)

精准读取声明的两种方法

如果确认令牌包含目标字段,用以下方式获取:

方式1:直接匹配声明类型字符串

var givenName = decodedeIdtoken.Claims.FirstOrDefault(c => c.Type == "given_name")?.Value;
var familyName = decodedeIdtoken.Claims.FirstOrDefault(c => c.Type == "family_name")?.Value;

方式2:使用ClaimTypes规范映射

借助System.Security.Claims中的枚举,避免硬编码字符串:

using System.Security.Claims;

var givenName = decodedeIdtoken.Claims.FirstOrDefault(c => c.Type == ClaimTypes.GivenName)?.Value;
var familyName = decodedeIdtoken.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Surname)?.Value;

排查令牌获取流程问题

若配置无误仍无字段,检查令牌请求环节:

  • 确保请求令牌时的scope参数包含profile(该范围用于返回用户姓名等基础信息),示例scope:openid profile User.Read
  • 若使用MSAL库获取令牌,确认客户端初始化时已正确配置所需范围

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 04:18:14