Azure ad b2c ADB2C如何在两个不同的应用程序之间共享用户令牌?
我希望实现这一点: 我有两个应用程序使用adb2c进行身份验证。我希望用户能够在第一个应用程序中以交互方式登录,然后在第二个应用程序中以静默方式登录 我现在拥有的: 这两个应用程序都在Azure环境中注册,具有两个不同的客户端id。 除了客户端id之外,这两个应用程序共享完全相同的代码、相同的缓存和相同的配置。 我正在用C#编写代码,并使用Microsoft.Identity.Client dll 我的问题是: 如果我对两个应用程序使用相同的客户端id(就像它们注册为单个应用程序一样),用户可以在一个应用程序中交互登录,然后在第二个应用程序中以静默方式登录 但是,如果我使用两个不同的客户端id,它将不再工作。如果用户第一次在应用程序1中以交互方式登录,当我在应用程序2中调用GetAccountsAsync()以在缓存中获取用户帐户时,它不会返回任何帐户 我的代码: 要以交互方式获取令牌,请执行以下操作:Azure ad b2c ADB2C如何在两个不同的应用程序之间共享用户令牌?,azure-ad-b2c,msal,Azure Ad B2c,Msal,我希望实现这一点: 我有两个应用程序使用adb2c进行身份验证。我希望用户能够在第一个应用程序中以交互方式登录,然后在第二个应用程序中以静默方式登录 我现在拥有的: 这两个应用程序都在Azure环境中注册,具有两个不同的客户端id。 除了客户端id之外,这两个应用程序共享完全相同的代码、相同的缓存和相同的配置。 我正在用C#编写代码,并使用Microsoft.Identity.Client dll 我的问题是: 如果我对两个应用程序使用相同的客户端id(就像它们注册为单个应用程序一样),用户可以
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;
}
专用异步任务AcquireTokenInteractiveAsync()
{
尝试
{
AuthenticationResult ar=await pubClientApp.AcquireTokenInteractive(config.ApiScopes)。具有B2CAuthority(config.GetAuthoritySignUpSignIn())。具有ExtraQueryParameters(ui_locale)。ExecuteAsync();
返回ar;
}
渔获物(MSAlexex)
{
}
捕获(例外情况除外)
{
}
返回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;
}
专用异步任务AcquireTokenSilentAsync()
{
尝试
{
var accounts=await publicclientapp.GetAccountsAsync();
如果(accounts.Count()>0)
{
AuthenticationResult ar=await pubClientApp.AcquireTokenSilent(config.ApiScopes,accounts.FirstOrDefault()).ExecuteAsync();
返回ar;
}
}
捕获(例外情况除外)
{
}
返回null;
}
感谢您的帮助:)您不能在应用程序之间共享令牌,这是您的期望 一旦静默呼叫失败,您必须在第二个应用程序上以交互方式获取令牌,并且交互流将依赖AAD B2C会话cookies为用户提供单一登录 您可以在此处阅读有关会话和单点登录的信息:
嗨,谢谢你的回答。我阅读了文档,看到了以下内容:“单一登录配置-Azure AD B2C会话可以使用以下作用域进行配置:租户-此设置为默认设置。使用此设置允许B2C租户中的多个应用程序和用户流共享同一用户会话。例如,一旦用户登录到一个应用程序,用户也可以在访问另一个应用程序时无缝登录。“我正在使用租户配置,因此根据文档,我尝试实现的应该是可能的,不是吗?根据我的回答,您尝试从缓存中获取应用2上的令牌,它将失败,然后尝试以交互方式获取,用户将通过浏览器cookie获取SSO,B2C将向App 2发行新代币。您不需要按照此场景的文档配置任何内容,只需要app2通过我们的身份验证端点执行重定向即可获得SSO。