如何在Microsoft Entra中向openid-configuration的claims_supported添加自定义声明?
问题背景
调用https://login.microsoftonline.com/{myAppId}/v2.0/.well-known/openid-configuration接口时,返回的claims_supported字段仅包含平台预定义的声明:
"claims_supported": [ "sub", "iss", "cloud_instance_name", "cloud_instance_host_name", "cloud_graph_host_name", "msgraph_host", "aud", "exp", "iat", "auth_time", "acr", "nonce", "preferred_username", "name", "tid", "ver", "at_hash", "c_hash", "email" ],
我方消费系统仅允许使用该列表中的声明作为用户名,但需要使用的自定义声明employeeId不在其中,无法直接使用。
解决方案说明
首先明确:Microsoft Entra的openid-configuration中claims_supported字段是平台预定义的,无法直接手动修改。它仅包含OIDC标准声明和Entra默认支持的核心声明。但可以通过以下方式满足需求:
映射自定义声明到现有支持的字段(限场景)
如果employeeId已存在于用户的Entra属性中,可在应用注册的「令牌配置」里设置可选声明,将employeeId映射到claims_supported中已有的字段(如preferred_username)。注意此方式需确保业务上不会和原字段用途冲突。配置自定义声明并调整消费系统逻辑
你可以在Entra应用注册的「令牌配置」中添加自定义声明,让ID令牌/访问令牌直接携带employeeId。之后修改消费系统的验证逻辑:先完成令牌合法性校验,再直接提取employeeId作为用户名,无需严格依赖claims_supported列表。通过Graph API补充获取自定义声明
如果消费系统允许额外API调用,可在获取令牌后,调用Microsoft Graph API查询用户的employeeId属性,再用于用户名验证。此方式无需修改claims_supported,通过补充数据实现需求。
内容的提问来源于stack exchange,提问作者Keith Banner

