扩展Azure Active Directory访问令牌声明:API组授权问题咨询
解决Azure AD组声明仅出现在ID Token而非Access Token的问题
我之前刚好碰到过一模一样的情况,默认开启组声明后确实只有id_token会带groups信息,要让access_token也包含这些组数据,你需要针对你的目标API单独配置声明映射,具体步骤如下:
1. 定位到你的API应用注册
在Azure AD的应用注册列表里,找到你要保护的那个API(也就是用户请求access_token时,aud字段对应的应用)——别搞错成客户端应用了,必须是资源端的API应用。
2. 配置组声明到Access Token
进入这个API应用的**「令牌配置」**页面:
- 点击**「添加组声明」**,弹出配置窗口后:
- 先选择你要包含的组类型:安全组、Microsoft 365组,或者两者都选
- 重点!在**「令牌类型」选项里,一定要勾选「Access」**(默认可能只勾选了ID,这就是为什么只有id_token有组信息)
- 然后选择组的标识符格式:推荐用组ID(唯一不重复),如果需要可读性也可以选组名称(注意重名风险),同步的AD组还能选sAMAccountName
- 最后保存配置
3. 验证配置效果
让用户重新发起授权流程获取新的access_token,用JWT解码工具解析后,就能看到groups声明已经出现在access_token里了。
额外提醒
- 如果你的组数量超过150个,Azure AD会自动触发“组筛选”机制,这时候token里只会返回
hasgroups声明,还是得调用Graph API,但组数量少的话就不会有这个问题 - 如果你需要自定义声明键(比如不想用默认的
groups,想改成user_roles之类的),可以在**「令牌配置」里添加「自定义声明」**:- 源类型选「组」,源属性选你要的组字段(比如组名称)
- 目标声明名称填自定义的键,令牌类型选「Access」
- 保存后新的access_token就会带上这个自定义声明
这样配置完,你就能直接从access_token里提取组信息做授权判断,完全不用依赖Graph API了。
内容的提问来源于stack exchange,提问作者user5711008
相关产品推荐
相关产品推荐

