Azure AD B2C用户流JWT未返回自定义应用扩展属性问题
核心问题
你配置不生效是踩了Azure AD B2C的两个硬性规则坑:
- 所有需要出现在B2C签发令牌里的自定义用户扩展属性,必须创建在租户自动生成的专用扩展应用上,建在你自己的业务应用上的扩展属性,B2C令牌签发管线根本不会读取。
- 普通Azure AD用应用清单
optionalClaims加自定义声明的方式,对B2C场景不生效,B2C的令牌声明配置是绑定在用户流/自定义策略上的,和业务应用的清单配置无关。
正确操作流程
- 第一步:获取B2C专用扩展应用的信息
进入Azure AD B2C的「应用注册」页面,选择「所有应用」,找到名称为b2c-extensions-app. Do not modify. Used by AADB2C for storing user data.的应用,复制两个值:- 应用的对象ID(objectId),用于创建扩展属性的API路径
- 应用的客户端ID(appId),去掉所有横杠,这个值才是扩展属性名里要拼接的ID段
- 第二步:在专用扩展应用上创建扩展属性
调用Graph API发POST请求创建属性,注意路径里的ID是上一步拿到的扩展应用对象ID,不是你业务应用的:
POST https://graph.microsoft.com/v1.0/applications/{b2c-extensions-app的对象ID}/extensionProperties { "name": "name", "dataType": "String", "targetObjects": [ "User" ] }
- 第三步:给目标用户设置扩展属性值
调用PATCH请求更新用户属性,属性名里拼接的是扩展应用去掉横杠的客户端ID:
PATCH https://graph.microsoft.com/v1.0/users/{目标用户对象ID} { "extension_{b2c-extensions-app去掉横杠的客户端ID}_name": "1234" }
- 第四步:配置令牌签发规则
不要改业务应用的清单配置,根据你用的B2C流程类型选对应配置:- 如果你用的是官方预置的用户流:进入对应登录用户流的配置页,找到「应用程序声明」选项,在列表里找到你刚创建的扩展属性,勾选后保存配置即可,属性会自动加入返回的id_token和access_token。
- 如果你用的是自定义IEF策略:先在扩展策略文件里声明对应的目录扩展属性,再在依赖方(RP)策略文件的
OutputClaims节点中添加该属性作为输出声明,策略上传后即可生效。
验证方式
配置完成后重新发起登录请求,拿到返回的JWT解码后,就能看到带extension_前缀的自定义属性声明了。
内容的提问来源于stack exchange,提问作者user3907939
相关产品推荐
相关产品推荐

