Я интегрировал Azure AD B2C в свое веб-приложение и использую MSAL на клиенте. Я использую Google в качестве социального IDP.
Используя Chrome, я начинаю только с одного идентификатора Google ([email protected]). Мое приложение вызывает loginRedirect(...)
, и я могу использовать [email protected] для успешного входа в Google. Если я затем закрою эту вкладку браузера (но не браузер), открою новую и заставлю мое приложение снова вызывать MSAL loginRedirect()
, я автоматически войду в систему как [email protected], и все будет хорошо. Предположительно, файл cookie b2clogin.com используется для запоминания предыдущей информации для входа.
Если я затем добавлю еще один идентификатор Google ([email protected]), поведение изменится. Повторяя описанный выше сценарий, когда мое приложение впервые вызывает loginRedirect()
и я пытаюсь войти через Google, меня просят выбрать между [email protected] и [email protected], как и ожидалось. Я выбираю [email protected], и я вошел в систему просто отлично. Если я затем закрою эту вкладку, открою новую и снова вызову приложение loginRedirect(), я автоматически попаду на страницу Google «Войти с помощью Google / Выберите учетную запись», где мне придется выбирать между [email protected] и [email protected]. Похоже, что AADB2C сохранил достаточно информации, чтобы знать, что я ранее входил в систему через Google, но фактический идентификатор Google, который использовался ранее, не выбирается автоматически, как я ожидал.
Следуя инструкциям в эта статья, я могу обойти это, а) сохранив последний использованный адрес электронной почты в файле cookie сеанса, а затем б) передав адрес электронной почты в Google как login_hint, но похоже, что это будет работать только с Google. Мы бы предпочли решение, которое будет работать для любого социального IDP.
Есть ли способ заставить AADB2C/Google автоматически выбирать предыдущую личность без использования login_hint?
То, что вы испытываете, — это поведение при входе в Google, а не в Azure AD B2C.
Google запоминает, кто входил в текущий сеанс (например, [email protected]), а также кто входил в текущий браузер в последних сеансах (например, [email protected] и [email protected]).
(Google также разрешает множественный вход.)
Использование login_hint
Google задокументировано в здесь.
login_hint
— это концепция OpenID Connect, поэтому Google, как поставщик OpenID Connect, поддерживает ее, но многие поставщики OAuth 2.0 этого не делают (по крайней мере, поддерживают стандартизированным образом).