使用Azure AD和MSAL的SPA应用程序之间的SSO

使用Azure AD和MSAL的SPA应用程序之间的SSO,azure,azure-active-directory,single-sign-on,msal,msal.js,Azure,Azure Active Directory,Single Sign On,Msal,Msal.js,我们有一系列单页应用程序,并部署它们,如appA.xyz-corp.com和appB.xyz-corp.com。我们如何配置Msal javascript,以便用户不必登录到每个应用程序。我们已经尝试过这里提到的方法。但是,会话存储将信息存储在每个域“appA.xyz-corp.com”中,而不是使用子域“xyz.com”。对于使用msal.js实现多个单页应用程序和跨应用程序无缝登录的最佳实践,我们将不胜感激 也有一些关于多个域的场景的信息。本质上,您需要捕获首选用户名并将其与登录请求一起发送

我们有一系列单页应用程序,并部署它们,如appA.xyz-corp.com和appB.xyz-corp.com。我们如何配置Msal javascript,以便用户不必登录到每个应用程序。我们已经尝试过这里提到的方法。但是,会话存储将信息存储在每个域“appA.xyz-corp.com”中,而不是使用子域“xyz.com”。对于使用msal.js实现多个单页应用程序和跨应用程序无缝登录的最佳实践,我们将不胜感激

也有一些关于多个域的场景的信息。本质上,您需要捕获首选用户名并将其与登录请求一起发送。为了同时捕获所有应用程序的用户名,我建议将其存储在所有应用程序都知道的域范围cookie中

 // Store the username after login
 document.cookie = "msal_username=Paul@xyz-corp.com;domain=.xyz-corp.com;path=/"

 // use the username
 var username = getCookieByName("msal_username"); // find some code to do that
 userAgentApplication.loginRedirect(scopes, "&login_hint=" + username);
这样做的缺点是,您需要在所有应用程序中实现这一点

 // Store the username after login
 document.cookie = "msal_username=Paul@xyz-corp.com;domain=.xyz-corp.com;path=/"

 // use the username
 var username = getCookieByName("msal_username"); // find some code to do that
 userAgentApplication.loginRedirect(scopes, "&login_hint=" + username);
不同域上的应用程序

当应用程序托管在不同的域上时,域B中的MSAL.js无法访问缓存在域A上的令牌

自动选择Azure广告上的帐户

使用登录提示

如果没有配置SID声明,或者需要在交互身份验证调用时绕过帐户选择提示,可以通过在MSAL.js交互方法(loginPopup、loginDirect、acquireTokenPopup和acquireTokenRedirect)中提供登录提示和可选的域提示作为extraQueryParameters来实现。例如:

userAgentApplication.loginDirect(作用域,&login\u hint=&domain\u hint=organizations)

通过读取用户ID令牌中返回的声明,可以获取login\u hint和domain\u hint的值

登录提示应设置为ID令牌中的首选用户名声明