无法检索Azure AD租户

时间:2017-08-06 15:37:58

标签: c# azure-active-directory adal azure-ad-graph-api

问题

无法检索租户的displayName

什么是好的

我的应用程序是一个多租户网站。 我使用Open Id Connect对客户进行身份验证,并从ordre中的代码授予流程中获取访问令牌(例如 armToken )以运行此请求:

https://management.azure.com/tenants

获取声明客户的所有租户的列表。说它是租户

这很好用。

出错的地方

然后我想获得有关所有租户的更多信息,因为它是显示名称。 所以我需要在租户

上为每个租户运行此请求

https://graph.windows.net/[tenantId]/tenantDetails?api-version=1.6

我使用这样的代码:

foreach (Tenant tenant in Tenants)
{
   string graphToken = await 
   GetAuthorizationToken("https://graph.windows.net/", tenant.TenantId);
   string json = await GetGraphRequest($"https://graph.windows.net/{tenant.TenantId}/tenantDetails? api-version=1.6", graphToken);

// I parse JSON to get my informations
}

我尝试了什么

问题可能在于 GetAuthorizationToken 方法,该方法无法检索正确的令牌。 我测试了所有 AcquireTokenAsync 签名,除了:

之外没有任何工作
AcquireTokenAsync(string resource, ClientCredential clientCredential);

但收到的令牌仅适用于租户测试与用户声明中的TID匹配的情况。

根据租户我收到几条消息:

{“odata.error”:{“code”:“Authorization_RequestDenied”,“message”:{“lang”:“en”,“value”:“没有足够的权限来完成操作。”}} }

==>但我给了 Microsoft Grant

所有可能的权限

{“odata.error”:{“code”:“Authorization_IdentityNotFound”,“message”:{“lang”:“en”,“value”:“无法建立调用应用程序的标识。“}}}

=>实际上,我没有声明作为标记

中的OID
  • 我检查了uri中没有斜线问题。
  • 我使用Postman检查了Graph请求,以确保这不是代码中的问题
  • 我是全球管理员

我的问题

我真的不知道自己能做些什么。

这应该是可能的,因为我可以看到它在这里工作:

https://github.com/projectkudu/AzureResourceExplorer/

但它不使用ADAL库。那么也许这是对该库的限制?

1 个答案:

答案 0 :(得分:1)

如果用户使用azure广告帐户登录您的应用程序,使用azure ad graph api tenantDetails操作,您只能获取发出访问令牌的租户详细信息。否则,它将抛出错误:Invalid domain name in the request url

要获取与用户帐户关联的所有Azure AD实例的列表,您可以尝试使用Windows Azure Service Management API,请参阅my reply here。作为回应,您可以获取租户的displayName,domainName和ID。