Authorization_RequestDenied。权限不足,无法完成操作。图 API

时间:2021-07-27 21:59:04

标签: azure azure-active-directory microsoft-graph-api azure-ad-b2c azure-ad-graph-api

在通过 Api 在 Web 应用程序上完成注册后,我必须更新用户的自定义属性。 Api 具有使用 GraphServiceClient 构造请求和更新的逻辑。当我运行代码时抛出异常

Code: Authorization_RequestDenied
Message: Insufficient privileges to complete the operation.
Inner error:
   AdditionalData:
   date: 2021-07-27T17:16:26
   request-id:  xxxx-xx-xxxx-xx
   client-request-id:  xxxx-xx-xxxx-xx
ClientRequestId: xxxx-xx-xxxx-xx

这就是代码看起来很标准的样子

 var additionalData = new Dictionary<string, object>()
 {
   {  helper.GetName(configuration.GetValue<string>("ClientId"),"Id"), Id } 
 };

await graphClient
        .Users[userId]
        .Request()
        .UpdateAsync(new User { AdditionalData = additionalData }); 

Startup 类中的图形 Api 配置看起来像

public static IServiceCollection AddGraphComponent(this IServiceCollection services, IConfiguration configuration)
{
    IConfidentialClientApplication confidentialClientApplication = ConfidentialClientApplicationBuilder
        .Create(configuration.GetValue<string>("ClientId"))
        .WithTenantId(configuration.GetValue<string>("TenantId"))
        .WithClientSecret(configuration.GetValue<string>("ClientSecret"))
        .Build();

    ClientCredentialProvider authenticationProvider = new ClientCredentialProvider(confidentialClientApplication);
        
    services.AddSingleton<GraphServiceClient>(sp =>
    {
        return new GraphServiceClient(authenticationProvider);
    });

    return services;
}

根据提供的文档 here Client Credential provider 似乎是我的场景的正确提供者,如开头所述。 WebApp -> X-Api -> AzureB2C

X-Api 就是这样| API 权限看起来像。

enter image description here

这是 b2c 扩展应用程序 | API 权限看起来像 enter image description here

总的来说,似乎是权限问题,不确定需要添加哪些权限。

1 个答案:

答案 0 :(得分:0)

您收到此错误的原因是您在应用程序的上下文中(而不是作为用户)执行 Graph API 操作,或者换句话说,权限是 Application Permission 而不是 {{1}并且管理员未同意执行这些操作。管理员需要对应用程序权限给予租户范围的同意。一旦管理员同意,错误就不会出现。

要了解有关委派和应用权限的更多信息,请参阅此:https://docs.microsoft.com/en-us/graph/auth/auth-concepts#delegated-and-application-permissions