Как я могу предотвратить раннее закрытие всплывающих окон при использовании chrome .identity.launchWebAuthFlow? - PullRequest
0 голосов
/ 18 марта 2020

Я звоню chrome .identity.launchWebAuthFlow из фонового скрипта моего расширения Chrome.

Используется для получения неявной аутентификации пользователя с https://login.microsoftonline.com

Всплывающий знак отображается нормально, что позволяет вводить учетные данные пользователя. Однако после отправки учетных данных окно не перенаправляется на мой URI перенаправления обратного вызова. Вместо этого он перенаправляет на другую страницу (которая является некой корпоративной страницей входа в Microsoft Azure AD), которая не требует действий пользователя.

В этот самый момент окно закрывается, и я получаю undefined ответ в функции обратного вызова launchWebAuthFlow. В то же время я получаю сообщение об ошибке консоли: Не проверено runtime.lastError: Не удалось загрузить страницу авторизации.

Тот же поток работает нормально из окна браузера: после предоставления учетных данных и перенаправления на корпоративная страница входа, наконец, она перенаправлена ​​на мой URL перенаправления (с готовым токеном авторизации).

Из этого я делаю вывод, что launchWebAuthFlow не ждет, пока перенаправление не будет сделано на мою страницу перенаправления, но закрывается преждевременно.

Есть ли способ предотвратить это?

1 Ответ

0 голосов
/ 20 марта 2020

Я потратил слишком много времени на это, но нашел обходной путь.

Все еще не уверен, почему launchWebAuthFlow ведет себя так. Но я решил решить иначе.

Это двойное перенаправление происходит потому, что сначала страница авторизации Microsoft требует ввода простого адреса электронной почты. Это позволяет ему решить, на какую корпоративную страницу авторизации перенаправить. Это происходит, даже если он повторно использует текущий сеанс (файлы cookie).

Поэтому я искал способ сократить маршрут и дать первой странице авторизации подсказку о том, какая корпоративная страница должна go следующий. Для этого вам нужно добавить еще один параметр в URL, используемый launchWebAuthFlow :

https://login.microsoftonline.com/{tenant}/oauth2/v2.0/authorize
?client_id={client-id}
&response_type=token
&login_hint=user@domain.com
&prompt=login
&redirect_uri={redirect-uri}
&scope={some-scope}

Обратите внимание, что мне также пришлось добавить prompt = login, Он работает без него из браузера (на самом деле даже быстрее с живой сессией). Однако это необходимо, если вызвать из chrome .identity.launchWebAuthFlow

Надеюсь, это поможет кому-то в подобной ситуации.

Подробнее здесь: Microsoft платформа идентификации и неявный поток грантов

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...