我有两个租户应用程序租户和客户租户。应用程序租户拥有 Azure AD 免费许可证,客户租户拥有 Azure AD Premium P1。 我们的 .NET 应用程序使用应用程序租户客户端 ID 和租户 ID,因为应用程序租户是主应用程序租户,并且其应用程序注册应用程序被标记为允许 Multi-Tenancy 登录。
当我尝试使用客户租户帐户的凭据登录时,如 [email protected]在我的应用程序上,它成功登录,但登录后我尝试使用图形 API 获取我的 Active Directory 用户,但作为响应,我只获取应用程序租户的用户。
应用程序租户是否缺少任何访问客户租户用户的权限?
最佳答案
当我们有一个 Multi-Tenancy 的azure广告应用程序时,我们通常希望在不同的租户中使用它来实现相同的功能,在您的场景中是您希望使用它来查询用户。但这并不意味着我们不需要做任何事情就可以使用应用程序租户中注册的aad应用程序来查询客户租户中的用户。我们首先需要让应用程序出现在客户的租户中,对吗?
您可以进入客户租户Azure门户 -> azure ad -> 企业应用程序 -> 所有应用程序
检查客户租户中是否存在aad应用程序,如果不存在,请按照this document添加此应用程序的管理员同意。 URL 应为 https://login.microsoftonline.com/{tenant_id_of_customer_tenant}/adminconsent?client_id={app_client-id_in_application_tenant}
。然后应该能够在客户租户中找到该应用程序,我们可以使用此应用程序来查询客户租户中的用户。
然后另一个问题出现了,我们可以使用这个应用程序来查询应用程序租户中的用户,对于客户租户也是如此,那么你的.NET应用程序如何知道现在应该查询哪个租户呢?根据登录用户?或者您应该告诉您的 .net 应用程序应该查询哪个租户?由于您提到您的 .net 应用程序正在尝试查询租户中的用户,所以恐怕您现在正在使用 client credential flow 来查询所有用户。
那么代码可能如下所示:
var scopes = new[] { "https://graph.microsoft.com/.default" };
string tenantId = "TenantId";
string clientId = "aad_app_id";
string clientSecret = "ClientSecret";
var clientSecretCredential = new ClientSecretCredential(
tenantId, clientId, clientSecret);
var graphClient = new GraphServiceClient(clientSecretCredential, scopes);
var user = await graphClient.Users.Request().GetAsync();
如果您在此处设置客户租户 id/tenantname.onmicrosoft.com,我认为应用程序将查询客户租户中的用户。
关于angular - Multi-Tenancy 应用程序未获取我的 Active Directory 用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73798804/