B2B与Microsoft Graph

时间:2016-11-17 15:28:51

标签: azure azure-active-directory microsoft-graph b2b

您可能知道,我正在创建一个使用B2B功能的多租户天蓝色应用程序。

我正在测试B2B功能,经过一些研究后我得到了一份工作样本。

小摘要:用户根据共同权限进行身份验证,第一个令牌是通过授权代码的共同权限获取的,从那时起,每当我需要服务客户端时,我都会尝试从“当前租户”权限中获取这些令牌。

当我请求'我'时,它只适用于家庭租户。当我向可信赖的租户请求我时,我收到一条错误,指出目录中不存在我的用户标识符。可能是因为用户实际上并不存在于受信任的租户中。

当我请求用户时,它工作正常。我可以同时获得家庭租户用户和受信任的租户用户。

这是正常行为吗? 这是我需要以编程方式处理的东西,还是通过使用AD图解决了? (所以,当我知道我需要用户信息时,只需查询家庭租户?) 或者这是一个错误吗?

对此的任何想法都将非常感谢!

2 个答案:

答案 0 :(得分:0)

如果您正在使用公共端点,则通过B2B协作功能添加到目录的访客将无法在多租户应用或Microsoft Graph上正常运行。

公共端点将始终针对他/她的家庭租户对用户进行身份验证,而不是针对他是访客的任何租户。

为了成功查询/我是否为访客,您需要让他们通过租户特定的端点登录他们是访客的租户。

有关更深入的解释/背景,请参阅我对其他帖子的回答: Can users from an unmanaged Azure AD directory, sign into an Azure AD multi-tenant application which resides in a different directory?

答案 1 :(得分:0)

我注意到当您想要在租户之间切换时,您需要重新授权当前租户。 我这样做了:  1.首先需要针对公共端点进行登录。  2.每当我需要某个资源的令牌时,我会尝试静默获取令牌。

=>这可能会抛出2个不同的AdalSilentTokenAcquisitionException

  • 在缓存中找不到任何内容,也找不到刷新令牌 =>在这种情况下,我再次将用户重定向到登录页面。
  • 当您在租户之间切换时,这是您第一次使用您信任的租户进行登录时,您可能会收到以下错误:用户或管理员应获得此应用程序的同意。虽然他的家庭租户的管理员已将该应用程序添加到家庭租户的目录中。谁知道为什么需要这种同意?因此,租户A和租户B管理员都已获得同意。为什么A中B的可信用户仍然需要同意?

我能够通过将用户重定向到授权请求URL来触发同意流程。 因此,当我收到AdalSilentTokenAcquisitionException时,错误代码为" failed_to_acquire_token_silently"然后我必须将用户重定向到authContext生成的URL(authenticationContext.GetAuthorizationRequestUrlAsync),清除缓存后,不会找到刷新令牌,然后重定向用户辞职。