首页 > 解决方案 > ADB2C 如何在两个不同的应用程序之间共享用户令牌?

问题描述

我想实现这一点: 我有两个应用程序使用 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-b2cmsal

解决方案


您不能在应用程序之间共享令牌,这是您所期望的。

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

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


推荐阅读