azure - 通过 Web API 控制器读取 Azure AD 组失败,并显示“权限不足,无法完成操作”
问题描述
我在我公司的 AAD 中注册了一个 Web API 应用程序。这是一个多租户应用程序,能够查询订阅客户的 AAD。当客户订阅我们的服务时,他们会在其 AAD 的企业应用程序注册部分注册我们的应用程序,并向我们提供tenantId、clientId 和 clientSecret。然后我们使用这些参数来查询客户的 AAD。
我正在使用以下内容从客户的 Azure AD 中读取组:
public async Task<GraphServiceClient> CreateGraphServiceClient(string tenantId, string clientId, string clientSecret)
{
string aadInstance = "https://login.microsoftonline.com/{0}";
string resource = "https://graph.microsoft.com";
string authority = string.Format(aadInstance, tenantId);
AuthenticationContext authContext = new AuthenticationContext(authority);
ClientCredential credentials = new ClientCredential(clientId, clientSecret);
var authResult = await authContext.AcquireTokenAsync(resource, credentials);
if(authResult == null)
{
throw new Exception("GetGraphServiceClient: AcquireTokenAsync failed!");
}
var accessToken = authResult.AccessToken;
var graphServiceClient = new GraphServiceClient(
new DelegateAuthenticationProvider(
requestMessageClientOtherTenant =>
{
requestMessageClientOtherTenant.Headers.Authorization = new AuthenticationHeaderValue("bearer", accessToken);
return Task.FromResult(0);
}));
return graphServiceClient;
}
//....
var graphServiceClient = CreateGraphClient(tenantId, clientId, clientSecret);
var graphGroupsPage = await graphServiceClient.Groups
.Request()
.Select(e => new {
e.Id,
e.DisplayName
})
.GetAsync();
我收到“权限不足,无法完成操作”错误。
我已经在网上看到了很多 2-3 岁的解决方法,但它们都不适合我。
这些权限与我们在 AAD 注册中分配给应用程序的权限完全相同。
我在这里不知所措。似乎授予了所有必需的权限,但我仍然收到错误消息。
我可以使用相同的图形客户端毫无问题地从客户的 AAD 中获取所有用户。
任何建议将不胜感激。
解决方案
当客户订阅我们的服务时,他们会在其 AAD 的企业应用程序注册部分注册我们的应用程序,并向我们提供tenantId、clientId 和 clientSecret。然后我们使用这些参数来查询客户的 AAD。
由于您的客户已授予您的多租户应用程序访问其租户信息,因此只tennantId
需要客户的,您应该使用自己的多租户应用程序clientId
并clientSecret
访问客户的 AD。
如果您使用客户的client_id和secret,您应该检查他们的应用程序(不是企业应用程序)下的权限,但是,这没有任何意义。如果是这样,则无需使用您的多租户应用程序。
推荐阅读
- powershell - Powershell,静默安装不起作用
- vue.js - Vue 路由器 - 访问 Vue 实例而不调用 next()
- if-statement - 如果相邻单元格有内容,则从总数中减去
- laravel - 目标组 443 使用以下代码进行健康检查失败:[502]
- python - 在python中更改特定列的数据类型
- oracle - 在递归 WITH SQL 语句中需要帮助
- c# - 如何保持 WPF UserControl 加载并使用 HwndSource(异常问题:Visual Target 的根 Visual 不能有父级)
- javascript - 如何从 javascript 访问多个 div 元素(块级元素),以更改所有 elememts 的转换属性?
- java - 如何为推送通知 (FCM) 启用声音?
- regex - 正则表达式在€符号之前找到除了浮动之外的所有内容