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;
}

谢谢你的帮助:)

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

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

你可以在这里阅读会话和单点登录:https://learn.microsoft.com/en-us/azure/active-directory-b2c/session-behavior?pivots=b2c-custom-policy

相关内容

最新更新