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

Azure AD中如何为非Graph API范围的Access Token添加自定义声明

在Azure AD非Graph API资源的Access Token中添加自定义声明

我刚好处理过类似的场景,给你一步步拆解怎么实现你要的policy":"readwrite自定义声明:

核心前提说明

首先要明确:自定义声明是配置在你请求的resource对应的资源应用注册里,而不是你的客户端应用。你当前的scope指向的是https://rbsessence.onmicrosoft.com/0a7c94a0-0c4e-4f95-ba06-XXXX/.default,所以要操作的是这个ID对应的应用注册,不是你发起token请求的客户端应用。

具体操作步骤

1. 找到目标资源应用注册

登录Azure门户,进入Azure Active Directory → 应用注册,在所有应用里找到ID为0a7c94a0-0c4e-4f95-ba06-XXXX的那个应用(就是你scope里的资源应用)。

2. 添加静态自定义声明

进入该应用注册的左侧菜单,选择令牌配置:

  • 点击添加声明按钮
  • 在弹出的窗口里,选择自定义声明,然后填写以下信息:
    • 声明名称:policy(要和第三方要求的完全一致,大小写敏感)
    • 源:选择「静态」(因为你要的是固定值readwrite)
    • 值:readwrite
    • 令牌类型:勾选「访问令牌(Access token)」(不要选ID令牌,因为你要的是access_token里的声明)
  • 点击添加保存配置

3. 确认客户端应用的权限配置

确保你的客户端应用(就是你用client_id发起请求的那个应用)已经被授予该资源应用的权限:

  • 回到客户端应用的注册页面,进入API权限
  • 确认已经添加了该资源应用的权限(比如你当前用的.default范围对应的权限),并且已经点击授予管理员同意(如果是租户级权限的话)

4. 重新获取并验证Access Token

用你原来的POST请求重新获取token:

POST https://login.microsoftonline.com/{Directory (tenant) ID }/oauth2/v2.0/token
Content-Type: application/x-www-form-urlencoded

password=pass&client_id=id&resource=https://graph.microsoft.com&grant_type=password&client_secret=secret&username=userName&scope=https://rbsessence.onmicrosoft.com/0a7c94a0-0c4e-4f95-ba06-XXXX/.default

拿到token后,去jwt.ms解析(或者用其他JWT解析工具),检查payload里是否包含"policy": "readwrite"字段。

额外注意事项

  • 如果之后需要根据用户、组或者其他条件动态设置policy的值,那就要用Azure AD的自定义令牌颁发策略(Custom Token Issuance Policy),不过对你当前的固定值需求来说,静态声明足够用了。
  • 确保你用的是v2.0端点(你当前已经在用oauth2/v2.0/token),v1.0端点的配置逻辑略有不同,但你当前的请求没问题。

内容的提问来源于stack exchange,提问作者Shreyas Holla P

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 22:12:31