【问题标题】:ADB2C How to share user token between two different applications?ADB2C 如何在两个不同的应用程序之间共享用户令牌?
【发布时间】:2021-02-19 09:01:15
【问题描述】:

我想实现这一目标: 我有两个使用 adb2c 进行身份验证的应用程序。我希望用户能够在第一个应用程序中以交互方式登录,然后在第二个应用程序中静默登录。

我现在拥有的: 这两个应用程序都在 Azure 环境中注册,具有两个不同的客户端 ID。 两个应用程序共享完全相同的代码、相同的缓存和相同的配置,除了客户端 ID。 我正在用 C# 编码并使用 Microsoft.Identity.Client dll。

我的问题是: 如果我为两个应用程序使用相同的客户端 ID(就像它们被注册为一个应用程序一样),用户可以在一个应用程序中以交互方式登录,然后在第二个应用程序中静默登录。

但是,如果我使用两个不同的客户端 ID,它将不再工作。如果用户第一次在应用程序 1 中以交互方式登录,当我在应用程序 2 中调用 GetAccountsAsync() 以获取缓存中的用户帐户时,它不会返回任何帐户。

我的代码: 以交互方式获取令牌:

private async Task<AuthenticationResult> AcquireTokenInteractiveAsync()
{
   try
   {
      AuthenticationResult ar = await pubClientApp.AcquireTokenInteractive(config.ApiScopes).WithB2CAuthority(config.GetAuthoritySignUpSignIn()).WithExtraQueryParameters(ui_locale).ExecuteAsync();
      return ar;
   }
   catch (MsalException ex)
   {
   }
   catch (Exception ex)
   {
   }
   return null;
}

静默获取令牌:

private async Task<AuthenticationResult> AcquireTokenSilentAsync()
{
   try
   {
      var accounts = await pubClientApp.GetAccountsAsync();
      if (accounts.Count() > 0)
      {
         AuthenticationResult ar = await pubClientApp.AcquireTokenSilent(config.ApiScopes,accounts.FirstOrDefault()).ExecuteAsync();
         return ar;
      }
   }
   catch (Exception ex)
   {
   }
   return null;
}

感谢您的帮助:)

【问题讨论】:

    标签: azure-ad-b2c msal


    【解决方案1】:

    您不能在应用程序之间共享令牌,您的观察结果是预期的。

    一旦静默呼叫失败,您必须在第二个应用程序上以交互方式获取令牌,并且交互流程将依赖 AAD B2C 会话 cookie 为用户提供单点登录。

    您可以在此处阅读有关会话和单点登录的信息: https://docs.microsoft.com/en-us/azure/active-directory-b2c/session-behavior?pivots=b2c-custom-policy

    【讨论】:

    • 您好,感谢您的回答。我阅读了文档并看到了这一点:“单点登录配置 - 可以使用以下范围配置 Azure AD B2C 会话:租户 - 此设置是默认设置。使用此设置允许多个应用程序和用户流入您的 B2C 租户共享相同的用户会话。例如,一旦用户登录到应用程序,用户也可以在访问时无缝登录到另一个应用程序。”我正在使用租户配置,所以根据文档,我想要实现的目标应该是可能的,不是吗?
    • 这是,根据我的回答,您尝试从缓存中获取 App 2 上的令牌,它将失败,然后尝试以交互方式获取它,用户将通过浏览器 cookie 和 B2C 获得 SSO将向 App 2 发出新的令牌。您不需要根据该场景的文档配置任何内容,只需要 App 2 通过我们的身份验证端点进行重定向以获取 SSO。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-12
    • 1970-01-01
    • 2017-11-28
    • 1970-01-01
    • 2021-06-21
    • 1970-01-01
    • 2019-03-11
    相关资源
    最近更新 更多