0

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

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

小总结:用户根据公共权限进行身份验证,第一个令牌是通过具有授权码的公共权限获取的,然后每次我需要服务客户端时,我都会尝试从“当前租户”权限获取这些令牌。

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

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

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

对此的任何想法将不胜感激!

4

2 回答 2

0

如果您使用的是公共终结点,通过 B2B 协作功能添加到目录的来宾将无法在多租户应用或 Microsoft Graph 上正常工作。

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

为了成功查询 /me 来宾,您需要让他们通过他们作为来宾的租户的租户特定端点登录。

有关更深入的解释/上下文,请参阅我对其他帖子的回答: 非托管 Azure AD 目录中的用户可以登录到驻留在不同目录中的 Azure AD 多租户应用程序吗?

于 2016-11-20T08:19:10.857 回答
0

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

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

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

我能够通过将用户重定向到授权请求 URL 来触发同意流程。所以当我得到一个AdalSilentTokenAcquisitionException,并且错误代码是“failed_to_acquire_token_silently”时,我不得不将用户重定向到由authContext(authenticationContext.GetAuthorizationRequestUrlAsync)生成的URL,当缓存被清除时,将找不到刷新令牌,然后重定向用户辞职。

于 2016-11-21T08:49:41.603 回答