如何将directory extension纳入Azure AD的access token中?
解决Azure AD中Directory Extension未出现在Access Token的问题
按以下步骤排查和修复:
确认扩展的目标对象类型
创建Directory Extension时,必须将目标对象设置为User(如果是用户属性)。如果目标对象是其他类型(如Group),用户的Access Token中不会包含该属性。可通过Graph API查询扩展定义验证:GET https://graph.microsoft.com/v1.0/applicationExtensions/{extension-id}检查
targetObjects字段是否包含User。验证Token配置的准确性
在Azure AD应用注册的「Token configuration」中,添加的扩展声明格式必须为extension_<应用ID去除连字符>_<自定义属性名>,且确保勾选了Access token选项(而非仅ID token)。确认权限已配置并授权
应用需具备读取用户扩展属性的权限,至少添加User.Read权限,并完成管理员/用户授权:- 在应用注册的「API权限」中添加
Microsoft Graph > 委派权限 > User.Read; - 点击「授予管理员同意」(针对租户内所有用户)或引导用户完成授权。
- 在应用注册的「API权限」中添加
检查用户对象的属性值
通过Graph API确认目标用户的扩展属性已赋值:GET https://graph.microsoft.com/v1.0/users/{user-id}?$select=extension_<应用ID去除连字符>_<属性名>如果属性值为空,Token中不会返回该声明。
清除Token缓存重新获取
Access Token可能被客户端缓存,需强制重新获取:- 注销当前登录用户后重新登录;
- 在Token请求中添加
prompt=login参数,强制Azure AD返回新Token。
确认Token请求的Scope参数
请求Access Token时,需指定正确的Scope。如果是调用自定义API,需包含API的Scope(如api://<API应用ID>/access_as_user);如果是调用Microsoft Graph,需包含https://graph.microsoft.com/User.Read等相关Scope。
内容的提问来源于stack exchange,提问作者Cristiano
相关产品推荐
相关产品推荐

