【发布时间】: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