2016-11-18 62 views
0

我正在为我的公司尝试Azure AD B2B功能。我试图通过门户邀请外部用户并使用https://graph.microsoft.com/beta/invitations。在这两种情况下,都会成功邀请用户并添加到我们的目录中登录用于社交帐户(然后使用Microsoft帐户)。如果它是一个非社交帐户(又名contoso.com),它没有以前的Azure AD,那么当我们的应用程序尝试登录用户时,我会得到一个access_denied。如果我试图强制许可流程,我得到以下信息:来自非托管Azure AD目录的用户是否可以登录位于不同目录中的Azure AD多租户应用程序?

AADSTS65005:目前不支持您 公司aaa.no.应用ZZZ您的公司目前处于非托管状态,并且 需要管理员通过DNS 验证aaa.no才能配置应用程序zzz之前声明公司的所有权。

我们有许多小公司作为客户,他们都必须在用户使用我们的应用程序之前管理Azure AD目录,这似乎是不合理的。它应该根据Microsoft得天衣无缝:

无痕:谁需要访问公司的应用 不需要有Azure的AD的合作伙伴公司。 Azure AD B2B协作提供简单的用户注册体验,为这些合作伙伴提供即时访问您的应用程序的 。

如果他们可以注册并创建他们的用户和目录,他们为什么不能让他们被邀请同意登录的应用程序(登录并阅读用户配置文件委托权限是必需的应用程序)?

我们已经允许拥有自己托管的Azure AD的公司在我们的应用程序中使用他们的用户。我们让全球管理员允许管理员同意我们的应用程序,以便他们可以登录用户并阅读目录数据。这些用户不会被添加到我们的目录中,并且完美地工作。另外,如果我以受邀用户身份前往新门户网站,则可以看到域aaa.no已通过验证,但我无法将其设置为主要网站。

我尝试过的其他事情没有工作:升级到最新的ADAL版本,试图在https://apps.dev.microsoft.com中创建应用程序并使用它,试图在旧的天蓝色门户中设置权限(似乎是新门户中的权限错误没有出现在清单中)并试图使申请单一租户。什么都没有

回答

2

用于编写Azure AD多租户应用程序的最流行指导和示例建议使用通用端点而不是租户特定端点。

Common endpoint: https://login.microsoftonline.com/common/oauth2/authorize 
Tenant specific endpoint: https://login.microsoftonline.com/company.com/oauth2/authorize 

共同端点允许用户从任何租户进行登录。它做的租户发现,这意味着,基于用户的电子邮件,它会自动将用户重定向到租户的端点实现这一点。但是,这也意味着[email protected]将始终作为company.com的员工登录,并且不会作为客户通过B2B协作功能添加为客人的其他公司的访客 - 简而言之,公共端点不支持来宾。

另一方面,租户特定端点只允许该租户的用户登录。虽然不进行租户发现,但仍允许来自其他租户的用户尝试登录,但会检查看看他们是否已作为嘉宾添加到租户。如果他们没有,登录将失败 - 简而言之,访客用户(用户通过B2B协作功能添加)只能在特定于承租人的终端中工作。

如果您希望多租户应用程序支持guest虚拟机,则需要自己进行租户发现,并利用租户特定的端点而不是通用端点。

这意味着你的应用程序需要知道哪些Azure的AD租户关联到每个工作区/团队/实例/不管隔离级,在最全,例如:

contoso.myapp.com or www.myapp.com/contoso will sign in users via login.microsoftonline.com/contoso.com 

fabrikam.myapp.com or www.myapp.com/fabrikamwill sign in users via login.microsoftonline.com/fabrikam.com 
+0

有趣的是,这听起来像是正确的答案,但我会等到标记答案,直到我从Azure支持获得答案(已向他们提出问题)。我们确实使用通用端点,并且我们需要支持来宾用户和使用他们自己的租户的用户。我会尝试改变租户发现,看看是否有效。我看到你在微软工作。你知道公共终端是否将在未来支持客人? –

+0

再次感谢您的回答。我在下面添加了另一个答案,以及我从Azure支持获得的最终响应,并简要描述了我使用的解决方法 –

+0

我试图采取这种方法,并且遇到了可能是Azure系统上的一个错误(请参阅http://stackoverflow.com /问题/ 43377553/openidconnect误差租户的标识符-MAY-不待一个空性全局唯一标识符/ 43377804)。但也许我只是做错了什么。 @萨卡你有没有一个样本来描述你过去如何做到这一点? –

0

从下面可以看出,Azure支持给了我相同的结论:公共端点不适用于来宾用户。我最终的解决方法是将所有用户作为访客用户添加到我的租户中,并使用特定于租户的终端。我还注意到,访客用户获得与他们的家庭用户不同的objectId,这意味着当外部租户用于确定组成员身份等时,我们需要存储访客与家庭用户之间的关系。

下面是我得到的最终答复从Azurte支持:

症状

您发送B2B邀请了几个客户,使他们能够使用已经在Azure的AD目录nameOfTenant.onmicrosoft.com创建了多租户应用“NameOfApplication”

驻留在非托管目录上的受邀电子邮件已验证用户无法使用“拒绝访问”错误访问该应用程序。潜在的错误消息:

AADSTS65005:应用程序NameOfApplication目前不支持您的公司.no。您的公司目前处于非托管状态,需要管理员通过.no的DNS验证声明公司​​所有权,然后才能设置应用程序NameOfApplication。

原因

这里的问题在于所使用的端点与用户认证进行。

在b2b邀请和公共租户端点的情况下,暗示将使用租户发现。这也意味着用户将在其原始租户中进行身份验证,而不使用在应用程序实际存在的租户中创建的访客帐户。

结论:在这个时间点,公共端点不支持访客帐户。

如果使用租户特定端点,则将使用由b2b进程生成的来宾帐户,但只有来自该特定租户的用户才能通过身份验证。 这意味着来自其他租户的用户仍可能尝试进行身份验证,但是如果尚未将其添加为原始租户的访客,则身份验证将失败。

结论:来宾用户(从B2B)将只在租户特定端点工作

分辨率

不幸的是没有其他解决这个问题,除非在开发应用程序进行自定义的方法租户发现操作,并从那里能够使用每个租户特定的端点。

从你引用自己的话说:

“......我用的是租户特定端点和所有用户转换到该租户的客人 。我们得到 目录读取访问权限的受管理外部租户中的用户可以在他们成为 我们监控的群组成员(在他们的租户中)时作为嘉宾添加。这样,我们仍然 允许这些公司控制从他们的系统的 访问我们的系统。所有其他用户将被添加为手动客人(社会 账户,非托管的外部租户,并从管理外部 租客,我们不会有读目录访问)......”

相关问题