Authorization_RequestDenied。权限不足,无法完成操作。图 API
Authorization_RequestDenied. Insufficient privileges to complete the operation. 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 });
图Api启动时的配置class看起来像
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 客户端凭据提供程序似乎是我在开头所述的场景的正确提供程序。 WebApp -> X-Api -> AzureB2C
X-Api是这样的| API 权限看起来像。
这是b2c-extension应用| API 权限看起来像
总的来说似乎是权限问题,不确定需要添加什么权限。
您收到此错误的原因是您在应用程序的上下文中(而不是作为用户)执行图形 API 操作,或者换句话说,权限是 Application Permission
而不是 Delegated Permission
并且管理员未同意执行这些操作。管理员需要在租户范围内同意应用程序权限。一旦管理员同意,错误就不会来了。
要了解有关委派和应用权限的更多信息,请参阅:https://docs.microsoft.com/en-us/graph/auth/auth-concepts#delegated-and-application-permissions。
我必须通过 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 });
图Api启动时的配置class看起来像
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 客户端凭据提供程序似乎是我在开头所述的场景的正确提供程序。 WebApp -> X-Api -> AzureB2C
X-Api是这样的| API 权限看起来像。
这是b2c-extension应用| API 权限看起来像
总的来说似乎是权限问题,不确定需要添加什么权限。
您收到此错误的原因是您在应用程序的上下文中(而不是作为用户)执行图形 API 操作,或者换句话说,权限是 Application Permission
而不是 Delegated Permission
并且管理员未同意执行这些操作。管理员需要在租户范围内同意应用程序权限。一旦管理员同意,错误就不会来了。
要了解有关委派和应用权限的更多信息,请参阅:https://docs.microsoft.com/en-us/graph/auth/auth-concepts#delegated-and-application-permissions。