如何使用个人Microsoft帐户通过AzureAD多租户应用访问AzureRM?

时间:2019-09-06 05:18:45

标签: azure authentication azure-active-directory multi-tenant

我的目标很简单:使用Azure AD多租户应用程序可以在其他租户上调用Azure Resource Manager API。但是,当您使用个人Microsoft帐户登录时,我不知道该怎么做。

  1. 我使用公司的租户创建了一个Azure AD多租户应用 enter image description here
  2. 然后创建了一个测试ASP.NET Core Web应用程序,该应用程序转到了这样的URL: enter image description here
  3. 将显示Microsoft的登录页面,我可以使用个人LIVE.COM 成功登录,测试Web应用程序将在其中接收具有给定重定向URL的回调。我有另一个要使用我的个人MS帐户创建的Azure租户。
  4. 多租户AAD应用已添加到https://account.live.com/consent/Manage的“个人空间”,但未添加到Azure AD租户。 enter image description here

从技术角度来看,这可能很有意义,但是当使用个人帐户登录时,如何将AAD应用添加到另一个租户?

我认为“授权” URL必须包含AAD租户名称/ ID而不是“公共”(确认在目标租户上创建了服务主体): enter image description here 但是,当用户登录时,该租户名称/ ID是未知的,我真的不知道该使用哪个API进行查询。

应该手动完成-检测个人MS帐户并找到与AAD租户的关联,或者是否有API可以简化这一过程?在两种情况下如何?如果一个帐户与多个租户(Azure Portal中的“交换目录”)关联,该怎么办?

P.S。使用URL https://login.microsoftonline.com/organizations/oauth2/v2.0/authorize(用“组织”代替“ common”)或https://login.microsoftonline.com/common/oauth2/authorize(不用“ v2.0”),将不允许使用个人MS帐户登录。


更新

为演示该问题,进行了4个测试以使用多租户应用访问资源“ https://management.azure.com/”:

  1. 使用v1终结点授权Microsoft的“ Microsoft Azure”应用-适用于个人帐户: https://login.microsoftonline.com/common/oauth2/authorize?client_id=1950a258-227b-4e31-a9cf-717495945fc2&response_type=code&response_mode=form_post&resource=https://management.azure.com/&nonce=123&state=common&redirect_uri=http%3A%2F%2Flocalhost%3A64696%2FAuthCallback

  2. 使用v2终结点授权相同的“ Microsoft Azure”应用程序-现在它不允许使用个人帐户: https://login.microsoftonline.com/common/oauth2/v2.0/authorize?client_id=1950a258-227b-4e31-a9cf-717495945fc2&response_type=code&response_mode=form_post&scope=https://management.azure.com/.default&nonce=123&state=common&redirect_uri=http%3A%2F%2Flocalhost%3A64696%2FAuthCallback

  3. 针对v1端点授权自定义多租户应用程序(插入您的客户端ID)-显示错误AADSTS50020“来自身份提供者live.com的用户帐户user@live.com在租户contoso中不存在。 com”,并且无法访问该租户中的应用程序“(应用程序名称)。需要先将该帐户作为外部用户添加到租户中。请注销并使用其他Azure Active Directory用户帐户再次登录。” https://login.microsoftonline.com/common/oauth2/authorize?client_id=&response_type = code&response_mode = form_post&resource = https://management.azure.com/&nonce=123&state=common&redirect_uri=http%3A%2F%2Flocalhost%3A64696%2FAuthCallback

  4. 针对v2端点授权自定义多租户应用-与测试#2相同-不允许个人帐户。

想法。

  1. v1端点允许v2端点允许个人帐户使用资源https://management.azure.com/
  2. Microsoft Azure应用程序可能具有带有未记录或硬编码设置的清单,该清单允许使用个人帐户获取所需资源。

答案

长话短说,按照微软的说法,这对普通公众是不可能的。

1 个答案:

答案 0 :(得分:0)

只有V2.0终结点支持个人帐户(即使它不属于任何Azure AD租户)也可以登录。

enter image description here

  

使用v1.0端点时,它可与个人帐户配合使用。

这是因为该个人帐户至少属于一个Azure AD租户。然后,该个人帐户将被识别为租户中的访客用户。

  

v2端点不允许该资源使用个人帐户   https://management.azure.com/

是的,如果您在使用v2.0端点时使用个人帐户登录,它将检测到您属于个人帐户,并将您重定向到个人帐户登录端点https://login.live.com/oauth20_authorize.srf

使用v2.0端点时,您必须标识租户以个人帐户登录

https://login.microsoftonline.com/{tenant}/oauth2/v2.0/authorize?
client_id=20244877-ae8f-4325-b4cf-c6dc239cb124
&response_type=code
&redirect_uri=https://localhost
&response_mode=fragment
&scope=https://management.azure.com/.default
&state=12345
&nonce=default

然后,您可以致电https://management.azure.com/tenants?api-version=2016-06-01列出该帐户所属的所有租户。

更新

  

您通常不能这样做。您不是在告诉Azure AD   MSA用户是外部用户的租户,因此Azure AD是   做出猜测并在注册该应用程序的租户中检查   (租户A)。如果您希望外部用户能够登录,则可以   必须指定以前邀请来宾的租户   (例如,租户B)。