使用Azure AD和MSAL的SPA应用程序之间的SSO
我们有一系列单页应用程序,并部署它们,如appA.xyz-corp.com和appB.xyz-corp.com。我们如何配置Msal javascript,以便用户不必登录到每个应用程序。我们已经尝试过这里提到的方法。但是,会话存储将信息存储在每个域“appA.xyz-corp.com”中,而不是使用子域“xyz.com”。对于使用msal.js实现多个单页应用程序和跨应用程序无缝登录的最佳实践,我们将不胜感激 也有一些关于多个域的场景的信息。本质上,您需要捕获首选用户名并将其与登录请求一起发送。为了同时捕获所有应用程序的用户名,我建议将其存储在所有应用程序都知道的域范围cookie中使用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实现多个单页应用程序和跨应用程序无缝登录的最佳实践,我们将不胜感激 也有一些关于多个域的场景的信息。本质上,您需要捕获首选用户名并将其与登录请求一起发送
// 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令牌中的首选用户名声明