B2B 与 Microsoft Graph

问题描述 投票:0回答:2

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

我正在测试 B2B 功能,经过一番研究,我得到了一个工作示例。

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

当我请求“我”时,它仅对房客起作用。当我向受信任的租户请求时,我收到一条错误消息,指出目录中不存在我的用户标识符。可能是因为用户实际上并不存在于受信任的租户中。

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

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

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

azure azure-active-directory microsoft-graph-api b2b
2个回答
0
投票

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

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

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

请参阅我对另一篇文章的回答以获取更深入的解释/上下文: 来自非托管 Azure AD 目录的用户是否可以登录驻留在不同目录中的 Azure AD 多租户应用程序?


0
投票

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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.