SSO между приложениями SPA, использующими Azure AD и MSAL - PullRequest
0 голосов
/ 27 февраля 2019

У нас есть несколько одностраничных приложений, которые можно развернуть, например appA.xyz-corp.com и appB.xyz-corp.com.Как настроить Msal javascript, чтобы пользователю не приходилось заходить в каждое приложение.Мы попробовали подход, упомянутый здесь https://github.com/AzureAD/microsoft-authentication-library-for-js/wiki/Sso.Однако хранилище сеансов хранит информацию для каждого домена "appA.xyz-corp.com", а не для использования поддомена "xyz.com".Мы ценим любую помощь в лучших практиках использования msal.js для нескольких одностраничных приложений и плавного входа пользователей в приложения.

1 Ответ

0 голосов
/ 28 февраля 2019

Вики , о которых вы упомянули , также содержат некоторую информацию об этом сценарии с несколькими доменами.По сути, вам нужно захватить предпочтительное имя пользователя и отправить его вместе с запросом на вход.Чтобы захватить имя пользователя для всех приложений одновременно, я бы предложил сохранить его в файле 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);

Недостатком этого является то, что вам необходимо реализовать этов всех ваших приложениях.

приложений в другом домене

Когда приложения размещены в разных доменах, токены кэшируются в домене AMSAL.js не может получить доступ в домене B.

Автоматически выбирать учетную запись в Azure AD

...

Использование подсказки для входа

Если у вас не настроено требование SID или вам необходимо пропустить запрос выбора учетной записи при интерактивных вызовах аутентификации, вы можете сделать это, указав login_hint и, необязательно, domain_hint в качестве extraQueryParameters в интерактивном MSAL.js.методы (loginPopup, loginRedirect, seekTokenPopup и acquTokenRedirect).Например:

userAgentApplication.loginRedirect(scopes, "&login_hint=<preferred_username>&domain_hint=organizations");

Вы можете получить значения для login_hint и domain_hint, прочитав утверждения, возвращенные в токене ID для пользователя.

должен быть установлен login_hintк утверждению предпочитаемого_пользователя в идентификаторе токена.

...