您可能知道,我正在创建一个多租户 Azure 应用程序,它使用 B2B 功能。
我正在测试 B2B 功能,经过一番研究,我得到了一个工作示例。
小总结:用户根据公共权限进行身份验证,第一个令牌是通过公共权限使用授权码获取的,从那时起,每次我需要服务客户端时,我都会尝试从“当前租户”权限获取这些令牌。
当我请求“我”时,它仅对房客起作用。当我向受信任的租户请求时,我收到一条错误消息,指出目录中不存在我的用户标识符。可能是因为用户实际上并不存在于受信任的租户中。
当我请求用户时,它工作正常。我可以获得家庭租户用户和受信任的租户用户。
这是正常行为吗? 这是我需要以编程方式处理的问题还是可以通过使用 AD 图来解决? (所以当我知道我需要用户信息时,只需查询家庭租户即可?) 或者这是一个错误?
任何对此的想法将不胜感激!
如果您使用通用终结点,通过 B2B 协作功能添加到目录的来宾将无法在多租户应用程序或 Microsoft Graph 上正常工作。
公共端点将始终针对用户的家庭租户进行身份验证,而不是针对他/她作为访客的任何租户进行身份验证。
为了成功查询 /me 来宾,您需要让他们通过作为来宾的租户的租户特定端点登录。
请参阅我对另一篇文章的回答以获取更深入的解释/上下文: 来自非托管 Azure AD 目录的用户是否可以登录驻留在不同目录中的 Azure AD 多租户应用程序?
我注意到,当你想在租户之间切换时,你需要对当前租户重新授权。 我是这样工作的: 1. 首次登录需要在公共端点上完成。 2. 每次我需要某个资源的令牌时,我都会尝试默默地获取令牌。
=> 这可能会抛出 2 个不同的 AdalSilentTokenAcquisitionException
我能够通过将用户重定向到授权请求 URL 来触发同意流程。 因此,当我收到 AdalSilentTokenAcquisitionException,并且错误代码为“failed_to_acquire_token_silently”时,我必须将用户重定向到 authContext (authenticationContext.GetAuthorizationRequestUrlAsync) 生成的 URL,当缓存被清除时,将找不到刷新令牌,然后重定向用户辞职。