identity.launchWebAuthFlow
Выполняет первую часть потока OAuth2, включая аутентификацию пользователя и авторизацию клиента.
Единственным обязательным параметром этой функции является URL-адрес авторизации поставщика услуг, который должен содержать ряд параметров URL, включая URL перенаправления и идентификатор клиента расширения. Затем поставщик услуг:
- аутентифицирует пользователя у поставщика услуг, если необходимо (то есть, если он не авторизован)
- просит пользователя разрешить расширению доступ к запрашиваемым данным, если необходимо (то есть, если пользователь ещё не авторизовал расширение)
Обратите внимание, что если ни аутентификация, ни авторизация не требуются, то эта функция завершится без взаимодействия с пользователем.
Эта функция также принимает необязательный параметр interactive: если он опущен или установлен в false, то поток принудительно завершается без взаимодействия с пользователем. В этом случае, если для аутентификации или авторизации требуется взаимодействие с пользователем, операция просто завершится ошибкой.
Эта функция возвращает Promise: если аутентификация и авторизация были успешны, то промис выполняется с URL-адресом перенаправления, содержащим ряд параметров URL. В зависимости от реализованного поставщиком услуг OAuth2 потока, расширение должно выполнить дополнительные шаги для получения действительного кода доступа, который затем можно использовать для доступа к данным пользователя.
Если произошла ошибка, промис отклоняется с сообщением об ошибке. Возможные ошибки включают:
- не удалось подключиться к URL-адресу поставщика услуг
- идентификатор клиента не совпал с идентификатором зарегистрированного клиента
- URL перенаправления не совпал ни с одним из зарегистрированных для этого клиента URL перенаправления
- пользователь не прошёл аутентификацию успешно
- пользователь не авторизовал расширение
- параметр
interactiveбыл опущен или установлен в false, но для авторизации расширения потребовалось бы взаимодействие с пользователем.
Синтаксис
let authorizing = browser.identity.launchWebAuthFlow( details // object )
Параметры
details-
object. Опции для потока, содержащие следующие свойства:url-
string. URL, предоставленный поставщиком услуг OAuth2 для получения токена доступа. Подробности этого URL должны быть указаны в документации соответствующего поставщика услуг, но параметры URL всегда должны включать: -
redirect_uriНеобязательно -
string. Представляет URI, к которому ваше расширение перенаправляется после завершения потока. Не требуется для работы потока на стороне браузера, если он соответствует сгенерированному URL перенаправления. См. Получение URL перенаправления. -
interactiveНеобязательно -
boolean. Если опущен илиfalse, принудительно завершает поток без взаимодействия с пользователем.Если пользователь уже авторизован и уже предоставил доступ для расширения, то
launchWebAuthFlow()может завершиться без взаимодействия с пользователем. В противном случае (если поставщику услуг требуется, чтобы пользователь вошёл в систему или авторизовал расширение), тоlaunchWebAuthFlow()запросит у пользователя взаимодействие: то есть поток будет интерактивным.Расширения не должны запускать интерактивные потоки, кроме как в ответ на действие пользователя. Однако иногда расширения всё ещё хотят получить доступ к данным пользователя без прямого действия пользователя (например, представим себе расширение, которое хочет получить доступ к данным при запуске браузера).
Это и есть назначение
interactive: если вы опуститеinteractiveили установите его вfalse, то поток завершится без взаимодействия: если поставщику услуг требуется взаимодействие с пользователем, поток просто завершится ошибкой. Поэтому, как общее правило: установитеinteractiveвtrue, если вы запускаете поток в ответ на действие пользователя, и опустите его в противном случае.
Значение возврата
A Promise. Если расширение успешно авторизовано, это значение выполнится со строкой, содержащей URL перенаправления. URL будет содержать параметр, который является либо токеном доступа, либо может быть обменён на токен доступа, используя документированный поток для конкретного поставщика услуг.
Совместимость с браузером
| Рабочий стол | Мобильный | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Internet Explorer | Opera | Safari | WebView Android | Chrome Android | Firefox for Android | Opera Android | Safari on IOS | Samsung Internet | |
launchWebAuthFlow |
Да | 79 | 53 | ? | Да | Нет | ? | ? | Нет | ? | Нет | ? |
redirect_uri |
Нет | Нет | 53["Since Firefox 86, theredirect_url parameter now supports a loopback address, see Получение URL перенаправления for details.", "Between Firefox 75 and Firefox 86, the redirect_uri URL parameter must be set to the URL returned by identity.getRedirectURL().", "Between Firefox 63 and Firefox 75, the redirect_uri URL parameter was optional."] |
? | Нет | Нет | ? | ? | Нет | ? | Нет | ? |
Примеры
Эта функция авторизует расширение для доступа к данным пользователя Google, в соответствии с документацией по адресу https://developers.google.com/identity/protocols/OAuth2UserAgent. Валидация возвращаемого токена доступа здесь не показана:
function validate(redirectURL) { // validate the access token } function authorize() { const redirectURL = browser.identity.getRedirectURL(); const clientID = "664583959686-fhvksj46jkd9j5v96vsmvs406jgndmic.apps.googleusercontent.com"; const scopes = ["openid", "email", "profile"]; let authURL = "https://accounts.google.com/o/oauth2/auth"; authURL += `?client_id=${clientID}`; authURL += `&response_type=token`; authURL += `&redirect_uri=${encodeURIComponent(redirectURL)}`; authURL += `&scope=${encodeURIComponent(scopes.join(' '))}`; return browser.identity.launchWebAuthFlow({ interactive: true, url: authURL }); } function getAccessToken() { return authorize().then(validate); }
Примеры расширений
Примечание: Этот API основан на API identity Chromium.
© 2005–2023 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/identity/launchWebAuthFlow