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

如何在Azure AD客户端-服务器应用中获取含自定义声明的Access Token?

解决Azure AD获取自有Web API Access Token并包含指定声明的问题

先搞定核心问题:拿到针对自有Web API的Token(不是MS Graph的)

你之前大概率踩了个常见坑——请求Token时用了MS Graph的scope,导致拿到的是给Graph的Token。要拿到自有API的Token,按下面步骤来:

  1. 注册你的Web API应用
    • 进入Azure AD门户新建应用注册,选择「Web API」类型
    • 进入「公开API」页面,添加一个自定义范围(比如api://{你的Web API应用ID}/access_as_user),用户同意类型选「管理员和用户」即可
  2. 给客户端应用配置权限
    • 打开桌面客户端应用的注册页,进入「API权限」→「添加权限」→「我的API」,选择刚才注册的Web API
    • 添加上一步创建的自定义范围,然后点击「授予管理员同意」(试用租户里你自己就是管理员,直接操作就行)
  3. 请求Token时用对scope
    不管是授权请求还是Token交换请求,scope参数必须使用你Web API的自定义范围,比如api://{Web API应用ID}/access_as_user offline_access,绝对不能用https://graph.microsoft.com/.default这类MS Graph的scope,否则拿到的肯定是给Graph的Token

再解决声明问题:让Access Token包含preferred_username和groups

注意:可选声明要配置在Web API应用(资源端),不是客户端应用,之前你可能配错地方了!

1. 添加preferred_username声明

  • 打开Web API应用的注册页,进入「令牌配置」→「添加可选声明」
  • 选择「Access Token」,勾选preferred_username,点击「添加」
  • 确认Web API应用的manifest中accessTokenAcceptedVersion设置为2(只有v2版本的Token支持把这个声明放进Access Token)

2. 添加groups声明

  • 打开Web API应用的manifest,修改groupMembershipClaims字段:
    • 只需要安全组的话,设置为"groupMembershipClaims": "SecurityGroup"
    • 需要所有组类型的话,设置为"groupMembershipClaims": "All"
  • 同样确保accessTokenAcceptedVersion为2
  • 小提示:如果用户所在组数量超过150个,Azure AD不会直接在Token里返回groups声明,需要通过MS Graph API查询,但POC阶段组数量少,不会有这个问题

验证用的请求格式(带PKCE的Authorization Code Flow)

授权请求(GET)

https://login.microsoftonline.com/{你的租户ID}/oauth2/v2.0/authorize?client_id={客户端应用ID}&response_type=code&redirect_uri={客户端重定向URI}&response_mode=query&scope=api://{Web API应用ID}/access_as_user offline_access&code_challenge={PKCE挑战码}&code_challenge_method=S256

Token交换请求(POST)

POST https://login.microsoftonline.com/{你的租户ID}/oauth2/v2.0/token
Content-Type: application/x-www-form-urlencoded

client_id={客户端应用ID}&grant_type=authorization_code&code={拿到的授权码}&redirect_uri={客户端重定向URI}&code_verifier={PKCE验证码}&scope=api://{Web API应用ID}/access_as_user offline_access

拿到Token后用jwt.ms解析,检查aud字段是否为你的Web API应用ID,同时确认preferred_username和groups声明是否存在。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 04:35:30