无法通过API连接Azure AD B2C租户并注册属性报错求助
你好!我帮你梳理下这个身份验证错误的几个关键排查点和修正方案,应该能解决你的问题:
1. 先确认访问令牌的有效性
这个错误最常见的原因是令牌的受众或对应应用身份不对:
- 用任意JWT解码工具解析你的令牌,检查
aud字段必须是https://graph.windows.net(Azure AD Graph的专属受众),如果是https://graph.microsoft.com(Microsoft Graph的受众),那这个令牌根本不能用在Azure AD Graph上。 - 同时确认
appid字段和你用来获取令牌的应用注册的Client ID一致,别用错了应用。
2. 检查应用的API权限配置
创建扩展属性需要应用拥有Azure AD Graph的应用级权限,且必须完成管理员同意:
- 登录Azure门户进入你的B2C租户,找到对应的应用注册。
- 转到「API权限」→「添加权限」→选择「Azure Active Directory Graph」→「应用权限」→勾选
Directory.ReadWrite.All权限。 - 点击「授予管理员同意」(必须由全局管理员或目录角色管理员操作),确保权限状态显示为「已授予」,而不是「需要管理员同意」。
3. 修正请求格式(这是你当前的核心问题!)
Azure AD Graph的extensionProperties端点只接受JSON格式的请求体,但你用了form-data,这会导致服务无法正确解析请求,甚至干扰身份验证的识别:
- 在Postman里把请求的「Body」类型切换为「raw」,并选择「JSON」格式。
- 请求体改成如下结构:
{ "name": "requiresMigration", "dataType": "Boolean", "targetObjects": ["User"] }
- 别忘了在请求头里加上
Content-Type: application/json。
4. 确认请求URL的正确性
- 把URL里的
<Object_ID>替换成你应用注册的对象ID(注意不是Client ID,在应用注册的「概述」页面能找到这个GUID)。 - 租户部分用
contoso.onmicrosoft.com或者租户GUID都可以,确保是你的B2C租户的正确标识。
修正后的完整Postman请求示例
- 请求方法:POST
- 请求URL:
https://graph.windows.net/contoso.onmicrosoft.com/applications/<你的应用对象ID>/extensionProperties?api-version=1.6 - 请求头:
Authorization: Bearer <你的访问令牌>Content-Type: application/json
- 请求体(raw JSON):
{ "name": "requiresMigration", "dataType": "Boolean", "targetObjects": ["User"] }
按照这些步骤调整后,应该就能解决身份识别的问题了。如果还是不行,可以再检查下获取令牌时的参数——比如用client_credentials流的话,resource参数必须是https://graph.windows.net,不能写错。
内容的提问来源于stack exchange,提问作者DMop
相关产品推荐
相关产品推荐

