Openid 创建多租户azure AD应用程序的服务主体以在其他AAD租户中公开其权限

Openid 创建多租户azure AD应用程序的服务主体以在其他AAD租户中公开其权限,openid,azure-active-directory,multi-tenant,openid-connect,adal,Openid,Azure Active Directory,Multi Tenant,Openid Connect,Adal,我已经在Azure AD中创建了一个应用程序,并翻转了多租户开关,使该应用程序成为多租户应用程序 然后,我按照文章中列出的步骤将来自其他Azure AD租户的用户登录到我的多租户应用程序 代码如下所示 string aadInstance = "https://login.microsoftonline.com/{0}"; string tenant = "common"; string authority = String.Format(CultureInfo.InvariantCulture

我已经在Azure AD中创建了一个应用程序,并翻转了多租户开关,使该应用程序成为多租户应用程序

然后,我按照文章中列出的步骤将来自其他Azure AD租户的用户登录到我的多租户应用程序

代码如下所示

string aadInstance = "https://login.microsoftonline.com/{0}";
string tenant = "common";
string authority = String.Format(CultureInfo.InvariantCulture, aadInstance, tenant);

Microsoft.IdentityModel.Clients.ActiveDirectory.AuthenticationContext context = new Microsoft.IdentityModel.Clients.ActiveDirectory.AuthenticationContext(authority);

AuthenticationResult result = await context.AcquireTokenAsync("https://XXXX.onmicrosoft.com/TodoListServiceMT", AppIdOfAppInDifferentTenant, new Uri("https://localhost:44399/"), new PlatformParameters(PromptBehavior.Always));
但是在身份验证过程中,我不断遇到以下错误

AADSTS65005:客户端应用程序已请求访问资源 . 这项请求已被批准 失败,因为客户端未在其应用程序中指定此资源 所需资源访问列表

该错误的修复要求我在另一个Azure AD租户的客户端应用程序中添加多租户应用程序的权限

但我无法在另一个Azure AD租户中的客户端应用程序的配置权限屏幕中找到我的多租户应用程序。我在列表中看到的只有Azure广告图、ARM和Azure Active Directory

以前有人成功尝试过这种方法吗?需要做什么才能在其他Azure AD租户中公开我的多租户应用程序

这里有租户、应用程序和工作资源的基本概述

Tenant A 
  -> Multi-tenant App, resource id(App Id URI)-"https://XXXX.onmicrosoft.com/TodoListServiceMT"

Tenant B
  -> Client App (AppIdOfAppInDifferentTenant)
对于身份验证,我使用租户B中的管理员用户

我尝试将AppIdoFappingDifferentintenant添加到多租户应用程序的应用程序清单的knownclientapplications部分,但只能在同一租户中添加应用程序的应用程序ID

解决方案

我仍然不知道为什么我的代码不能生成同意 提示成功注册SP,但我尝试使用 新发布的 这对我很有效

在中创建多租户应用程序SP的命令顺序 不同的租户如下所示

命令成功完成后,多租户应用程序将 开始显示在客户端的“所需权限”屏幕中 应用程序


一般来说,您可以尝试使用租户2中的帐户,在租户1中登录您的应用程序,成功登录后,您的应用程序将自动添加到租户2中。您可以尝试执行以下步骤:

在AD应用程序的配置刀片中启用多租户:

使用adal时修改配置,将tenantId设置为common

运行应用程序,使用租户2中的用户登录应用程序。 接受租户1中您的应用程序的许可

成功登录后,您可以发现您的应用程序已添加到租户2中。


Gary Liu的回答基本正确,并概述了如何在租户B中创建服务主体。完成这些操作后,您应该能够:

转到新门户 在应用程序注册下查找您的客户端应用程序 转到所需权限 单击添加 单击选择一个API 在出现的搜索栏中输入多租户应用程序或其一部分的名称 选择多租户应用程序,然后定义客户端对其所需的权限
你能在这里描述不同的应用程序和租户吗?类似这样:租户A:客户端应用程序1,资源应用程序1。租户B:用户1。客户端应用程序1需要调用资源应用程序1。租户B的用户1正在尝试登录客户端应用1,并收到一个错误,即客户端应用1未将资源应用1注册为所需的资源访问。您在步骤2中使用的资源是什么?这些正是我所遵循的步骤,请参见上面更新的问题。我没有设置resource。我使用ADAL的AcquireTokenAsync方法,它的所有重载方法都需要resource作为参数。你能帮我拿一个你的代码样本吗?我已经按照这些步骤得到了上面提到的错误而不是同意提示如果你仍然得到了你在帖子中提到的错误,你还没有在客户端应用程序中添加所需的访问权限。要做到这一点,你必须通过服务应用程序的许可,以便在租户B中创建服务主体。这正是我遇到的问题。我将我的应用程序设置为多租户应用程序,现在我尝试在其他租户中为我的多租户应用程序提供访问权限。如何使多租户应用程序的权限显示在不同租户的应用程序上?
Connect-AzureAD -TenantId "TenantId as Guid"
New-AzureADServicePrincipal -AppId "Client/Application Id of the multi tenant application"