通过Graph API创建AD B2C应用后获取令牌遇AADB2C90205权限错误
Azure AD B2C 应用注册权限授予问题及解决方法
问题描述
通过Graph API程序化创建Azure AD B2C应用注册,应用创建成功且已添加必要scope和服务主体。操作流程及遇到的问题如下:
- 使用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
相关产品推荐
相关产品推荐

