Spec-Zone.ru › Web Extensions

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, the redirect_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);
}

Примеры расширений

  • google-userinfo

Примечание: Этот 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API