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

通过Graph API创建AD B2C应用后获取令牌遇AADB2C90205权限错误

Azure AD B2C 应用注册权限授予问题及解决方法

问题描述

通过Graph API程序化创建Azure AD B2C应用注册,应用创建成功且已添加必要scope和服务主体。操作流程及遇到的问题如下:

  1. 使用clientID获取授权码:
https://<tenant>.b2clogin.com/<tenant>.onmicrosoft.com/<scope>/oauth2/v2.0/authorize?response_type=code&scope=<scopeID>%20offline_access&redirect_uri=https%3A%2F%2Fjwt.ms&client_id=<clientID>

跳转登录页完成登录后,成功获取授权码。
2. 使用授权码调用API获取刷新令牌:

https://<tenent>.b2clogin.com/<tenent>.onmicrosoft.com/<scope>/oauth2/v2.0/token

触发错误:

{
"error": "invalid_grant",
"error_description": "AADB2C90205: This application does not have sufficient permissions against this web resource to perform the operation.\r\nCorrelation ID:\r\nTimestamp: 2023-11-09 17:20:12Z\r\n"
}

不清楚如何通过REST API程序化授予User.Read、User.ReadWriteAll这类读写权限。

附加操作信息

更新scope的请求

PATCH https://graph.microsoft.com/beta/applications/appObjId/

请求体:

{
    "requiredResourceAccess": [
        {
            "resourceAppId": "00000003-0000-0000-c000-000000000000",
            "resourceAccess": [
                {
                    "id": "7427e0e9-2fba-42fe-b0c0-848c9e6a8182",
                    "type": "Scope"
                },
                {
                    "id": "37f7f235-527c-4136-accd-4a02d197296e",
                    "type": "Scope"
                }
            ]
        }
    ]
}

创建服务主体的请求

POST https://graph.microsoft.com/beta/servicePrincipals

请求体:

{
    "appId": "A"
}

问题原因及解决步骤

1. 核心原因

当前仅在应用注册的requiredResourceAccess中声明了权限,但未对服务主体完成权限同意操作,这是触发invalid_grant错误的关键。

2. 程序化授予权限步骤

步骤1:确认权限ID对应关系

你用到的权限ID对应权限:

  • 7427e0e9-2fba-42fe-b0c0-848c9e6a8182 → User.Read(委托权限)
  • 37f7f235-527c-4136-accd-4a02d197296e → User.ReadWriteAll(应用权限,需管理员同意)

步骤2:授予应用权限(管理员同意)

对于应用权限,需通过Graph API向服务主体添加权限并授予同意:

POST https://graph.microsoft.com/beta/servicePrincipals/{servicePrincipalId}/appRoleAssignments

请求体:

{
    "principalId": "{servicePrincipalId}",
    "resourceId": "00000003-0000-0000-c000-000000000000", // Microsoft Graph的服务主体ID
    "appRoleId": "37f7f235-527c-4136-accd-4a02d197296e" // User.ReadWriteAll的权限ID
}

步骤3:处理委托权限(可选)

若需为委托权限授予全局管理员同意,使用以下API:

POST https://graph.microsoft.com/beta/oauth2PermissionGrants

请求体:

{
    "clientId": "{servicePrincipalId}",
    "consentType": "AllPrincipals",
    "resourceId": "00000003-0000-0000-c000-000000000000",
    "scope": "User.Read offline_access",
    "startTime": "2023-11-09T00:00:00Z",
    "expiryTime": "2024-11-09T00:00:00Z"
}

3. 注意事项

  • 操作上述API需具备Directory.AccessAsUser.All或Application.ReadWrite.All等管理员级权限。
  • 可通过GET https://graph.microsoft.com/beta/servicePrincipals?$filter=appId eq '{appId}'验证服务主体是否创建成功。
  • 授权码请求中的scope参数需使用权限名称(如https://graph.microsoft.com/User.Read),而非权限ID。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 18:33:27