B2B静默认证

时间:2017-07-12 11:00:22

标签: microsoft-graph adal

我们的应用程序正在为Android和IOS平台使用Adal SDK。 我们希望在租户之间添加B2B和共享数据的支持。 假设家庭租户的用户已经被邀请到不同的租户。

我想知道,如果用户已经在家庭租户之前已经登录,那么将令牌发送给邀请租户的API是什么? 什么是向邀请租户默默获取令牌的方式?

我尝试并设法使用交互式登录获取令牌(通过提供特定的邀请租户ID而不是使用常用)但我不确定如何对邀请租户执行静默登录(当用户有家庭租户的代币)

我设法做的是默默地获取一个令牌给家庭租户,然后使用我获得的刷新令牌,通过调用acquireTokenByRefreshToken函数(并使用两个AuthenticationContext - 一个共同的一个来获得一个令牌给邀请的租户)权限和第二个具有特定租户id)但后来我注意到在Android SDK中,acquireTokenByRefreshToken被标记为已弃用,在IOS SDK中,似乎此功能是私有的,因此我们无法真正使用它。

所以我想知道的是,使用房屋租户的代币和邀请房客的身份证来向招聘租户提供代币的正确API是什么?

3 个答案:

答案 0 :(得分:1)

1.14.x+(2018年2月发布)支持ADAL for Android中的来宾访问-可以找到最新版本的链接here。它们可以从Maven Central下载。

对于来宾场景,可以使用包含租户ID的授权URL来重建AuthenticationContext,然后可以使用从{{3}获取的UserInfo.userId进行acquireTokenSilent呼叫}之前的acquireTokenacquireTokenSilent通话中。

请注意,截至2018年10月(撰写本答案之时),如何支持x租户刷新令牌存在一些局限性:

如果您要在以下位置执行流程...

  1. 您为家庭租户和...
  2. 获取了令牌(使用UI并要求用户输入凭据)
  3. 然后,您默默地为来宾租户
  4. 获取令牌。

然后,这仅在设备已连接(注册)到家庭租户的情况下才有效。在其他所有情况下,以下是受支持的流程...

  1. 您为家庭租户和...
  2. 获取了令牌(以交互方式,使用UI输入凭据)。
  3. 然后,您以静默方式为家庭住户
  4. 获取令牌。
  5. 您为来宾租户和...
  6. 获取了令牌(以交互方式,使用UI输入凭据)。
  7. 然后,您默默地为来宾租户
  8. 获取令牌。

答案 1 :(得分:0)

对于未注册(未注册?)的设备,似乎 您必须先以交互方式登录外部租户,然后才能获取访问令牌

但是,正如您在第一个答案(第二部分)中所看到的那样,可以使用一个REST API,以便仅通过使用本地租户的刷新令牌来获取对外部租户的访问令牌(并且没有强制用户进行交互式登录)

SDK今天不支持此功能

答案 2 :(得分:-1)

  

将从下一个主要版本中删除。我们不建议开发人员依赖刷新令牌,* ADAL将处理缓存查找,并在必要时刷新RT。

根据说明,下一版ADAL for Android将自动为我们处理续订令牌。您可以参考azure-activedirectory-library-for-dotnet library。它还使用
自动处理重新令牌 AcquireTokenAsync(string resource, string clientId, Uri redirectUri, IPlatformParameters parameters)

  

所以我想知道的是,使用房屋租户的代币和邀请房客的身份证来向招聘租户提供代币的正确API是什么?

根据我的理解,SDK不支持刷新不同租户的访问令牌。作为解决方法,您可以像下面一样直接发布请求来刷新令牌:

POST:https://login.microsoftonline.com/{targetTenant}/oauth2/token
grant_type=refresh_token&client_id={clientId}&client_secret={client_secret}&resource={resource}&refresh_token={refresh_token_from_home_tenant}