Entra External ID自定义声明在客户端ID令牌存在但ASP.NET Core Web API中缺失
问题解答
关于后端应用令牌配置的理解
你的理解有偏差。后端ASP.NET Core Web API的令牌配置核心作用有两个:
- 验证前端请求的合法性:校验前端传来的Access Token,确认请求来自授权的客户端(你的Angular应用),且用户具备访问API的权限。
- 后端调用外部服务的身份凭证:当后端需要调用Microsoft Graph等受保护服务时,才会用自身的令牌配置获取调用所需的令牌。
所以它不只是用于后端与其他服务通信,更关键的是作为API的身份验证入口,确保前端请求的有效性。
自定义属性未出现在Access Token中的原因
导致这个问题的常见原因如下:
- 受众(Audience)配置错误:
在Entra ID中添加自定义属性时,必须针对后端API应用的Access Token进行配置。如果误将属性添加到前端应用的ID令牌配置里,后端收到的Access Token不会包含该属性。 - 前端未请求正确的权限范围:
Angular应用在获取Access Token时,需要明确指定后端API的权限范围(比如api://<后端客户端ID>/access_as_user)。如果请求的范围不匹配,Entra ID不会将自定义属性注入到令牌中。 - 令牌配置未正确关联后端应用:
检查Entra ID中后端API应用的“令牌配置”,确认自定义属性已添加,类型设为“Access”,且保存后等待配置生效(通常需要1-5分钟)。 - 令牌版本不兼容:
确保后端接收的是v2.0版本的Access Token,v1.0令牌的自定义属性注入规则与v2.0不同,可能需要调整配置方式。 - Claim类型匹配错误:
自定义属性对应的Claim类型可能不是默认的ClaimTypes.Role,而是自定义的URI格式(比如http://schemas.microsoft.com/identity/claims/<属性名>)。检查属性的Claim类型,确保代码中用正确的类型筛选。
排查建议
- 使用JWT解码工具解析后端收到的Access Token,确认令牌的
aud(受众)是否为后端API的客户端ID,同时查看是否包含目标自定义属性。 - 重新核对Entra ID中后端API应用的令牌配置,确保自定义属性已正确添加到Access Token的配置项中。
- 检查Angular应用的MSAL请求逻辑,确保获取Access Token时指定了后端API的完整权限范围。
内容的提问来源于stack exchange,提问作者Weissvonnix
相关产品推荐
相关产品推荐

