【问题标题】:B2B with Microsoft GraphB2B 与 Microsoft Graph
【发布时间】:2016-11-17 15:28:51
【问题描述】:

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

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

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

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

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

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

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

【问题讨论】:

  • B2B 的一个重要内容是邀请。您是否邀请来自一个 AAD 的用户进入另一个?
  • 是的,租户 a 的用户 a 已被邀请到租户 b。在为租户 b 请求令牌时更改权限时,我无法请求我,尽管我能够从租户 b 请求用户。这可以通过查询我的家庭租户来解决。所以现在,我以这种方式修复它。但是现在我遇到了另一个问题,当我回收我的应用程序时,令牌缓存被清除(使用 httpcache)。从租户那里请求用户不是问题,他没有静默地请求它,但是来自获取令牌的令牌可以完成这项工作。这对“我”不起作用,我总是必须注销/登录

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


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2020-04-27
      • 1970-01-01
      • 2022-08-26
      • 1970-01-01
      • 1970-01-01
      • 2023-02-17
      • 2021-06-11
      • 1970-01-01
      • 2018-08-10
      相关资源
      最近更新 更多