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

使用Service Principal上传Azure AD B2C自定义策略失败排查

问题

我已创建带密钥的注册应用,可通过以下curl命令获取访问令牌:

curl -X POST -H "Content-Type: application/x-www-form-urlencoded" -d "grant_type=client_credentials&client_id=xxx&client_secret=xxx&scope=https%3A%2F%2Fgraph.microsoft.com%2F.default" https://login.microsoftonline.com/xxx/oauth2/v2.0/token

权限已配置完成,且可通过以下az rest命令正常上传自定义策略:

az rest --method put --headers "Content-Type=application/xml" "Authorization=Bearer xxxxx " --url 'https://graph.microsoft.com/beta/trustFramework/policies/xxx/$value' --body "@xxx.xml"

现在我改用相同的client id、tenant id和密钥值,通过以下命令以Service Principal登录获取令牌:

az login --service-principal --username $client_id --password $client_secret --tenant $tenant_id

# access_token=$(az account get-access-token --resource-type ms-graph --query accessToken -o tsv | tr -d '
')

虽能获取到令牌,但上传时出现错误:

Forbidden({"error":{"code":"AADB2C","message":"'3b3bf757-6233-4fd2-9ed0-df708b80d59d' is not an Azure AD B2C directory. Access to this Api can only be made for an Azure AD B2C directory."

请问我使用Service Principal的登录方式是否正确?为何无法完成上传?

解答

登录命令语法本身无问题

az login --service-principal --username $client_id --password $client_secret --tenant $tenant_id这条命令的语法是正确的,能成功获取令牌也说明服务主体的身份验证流程是通的。

上传失败的核心原因

1. 租户ID并非Azure AD B2C租户

错误提示明确指出当前使用的租户ID不是B2C目录,哪怕你认为和curl命令用的是同一个,也建议再次核对:

  • 确认$tenant_id变量对应的是Azure AD B2C租户的ID(通常格式为xxx.onmicrosoft.com,或者对应的GUID),而非普通Azure AD租户的ID。
  • 可以在Azure门户的B2C租户概述页面查看正确的租户ID,确保和命令中使用的一致。

2. 获取令牌时的资源范围配置错误

你当前用--resource-type ms-graph获取令牌,这个参数没有匹配到B2C自定义策略上传所需的Graph API资源范围。之前curl命令中明确指定了scope=https://graph.microsoft.com/.default,所以获取令牌时需要确保目标资源是https://graph.microsoft.com,把获取令牌的命令修改为:

access_token=$(az account get-access-token --resource https://graph.microsoft.com --query accessToken -o tsv | tr -d '\r')

这样获取到的令牌才会和curl命令获取的拥有相同的受众范围,符合B2C自定义策略上传的权限要求。

额外验证点

如果以上两点都确认无误,再检查服务主体的权限是否确实包含TrustFrameworkPolicy.ReadWrite.All(B2C自定义策略上传所需的Graph API权限),并且已经完成管理员同意(因为client_credentials流需要管理员预先同意权限)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 21:52:21