如何在Azure AD生成AccessToken时传入自定义testId并在验证时获取
解决Azure AD客户端凭据模式下动态传递自定义参数的方案
针对你在客户端凭据(client_credentials)模式下需要动态传入testId并在验证token时获取的需求,以下是几种可行的实现方式:
1. 使用OAuth 2.0的claims参数(推荐)
Azure AD支持在token请求中通过claims参数传递动态声明,具体操作如下:
- 在POST请求的负载中添加
claims字段,以转义后的JSON字符串格式传入testId:
{ "client_id": "你的客户端ID", "client_secret": "你的客户端密钥", "scope": "你的权限范围", "grant_type": "client_credentials", "claims": "{\"id_token\":{\"testId\":{\"value\":\"动态testId值\"}}}" }
- 提前在Azure AD应用注册的令牌配置中添加对应自定义声明:选择声明类型为
ID令牌或访问令牌(根据你使用的token类型),名称设为testId,源类型选提供程序,无需硬编码值。 - 验证token时,可直接从token的payload中读取
testId字段的值。
2. 应用角色动态赋值(适用于关联权限的场景)
如果testId对应业务中的特定资源标识,可通过以下方式实现:
- 在Azure AD应用注册中创建名为
testId的应用角色,开启动态赋值权限。 - 获取token前,通过Azure Graph API为当前服务主体临时分配该角色并传入动态
testId值,再发起token请求。 - 此方式适合需要将
testId与权限绑定的场景,但操作相对繁琐,需额外配置Graph API权限。
3. 自定义令牌中转服务(完全自定义控制)
若上述方式无法满足需求,可搭建中间令牌服务:
- 客户端先向自定义服务发起请求,传入
testId及Azure AD token的基础请求参数。 - 自定义服务向Azure AD申请基础token后,将
testId添加到token的payload中,用自有密钥重新签名后返回给客户端。 - 验证token时,先验证自定义服务的签名,读取
testId,同时可校验原Azure AD token的有效性。 - 此方式灵活性最高,但需额外维护服务及密钥管理体系。
注意事项
- 客户端凭据模式下,Azure AD默认不会在访问令牌中包含自定义声明,必须通过
claims参数显式请求,且需提前完成声明配置。 - 使用
claims参数时,需确保JSON字符串已正确转义,避免请求解析失败。
内容的提问来源于stack exchange,提问作者Akki
相关产品推荐
相关产品推荐

