Last updated
Last updated
Single-page приложения (или browser-based приложения) - запускаются в браузере после подгрузки JS/HTML. Тк код загружается в браузере клиента, то сохранить client secret в тайне не получится. Следовательно, он не используется в SPA. Flow такой же, как Authorization Code Flow, но на последнем шаге authorization code обменивается на access-токен без использования client secret.
Обратите внимание, что отсутствие использования секрета клиента означает, что использование параметра состояния еще более важно для одностраничных приложений.
Некоторые сервисы используют этот альтернативный Flow. Он пропускает этап обмена authorization code на access-токен, а сразу получает его в query-параметре на шаге Authorization Grant.
На практике это необходимо лишь в очень ограниченных случаях. Несколько основных реализаций (Keycloak, Deutsche Telekom, Smart Health IT) решили полностью избежать Implicit Flow и вместо этого использовать Authorization Code Flow.
Чтобы SPA могло использовать Authorization Code Flow, оно должно быть способно отправлять POST-запросы => на стороне сервера должен быть настроен CORS (если сервер авторизации находится на другом домене). Если поддержка CORS-заголовков не вариант, тогда сервис может использовать Implicit Flow.
В любом случае, как с Implicit Flow, так и с Authorization Code Flow без client secret, сервер должен требовать регистрации Redirect URL, чтобы поддерживать безопасность flow.
Единственный способ обеспечить безопасность Authorization Code Grant без client secret - это использование параметра state
и ограничение Redirect URL для доверенных клиентов. Поскольку секрет не используется, нет другого способа проверить личность клиента, кроме как с помощью зарегистрированного Redirect URL. Вот почему вам необходимо предварительно зарегистрировать Redirect URL в службе OAuth 2.0.
response_type
(required)
Установлен в code
client_id
(required)
redirect_uri
(optional)
Вообще, рекомендуется. Куда хотим перенаправить пользователя после успешной авторизации. Обязан совпадать с Redirect URI, что мы указали при регистрации клиента OAuth
scope
(optional)
Одно или несколько значений, разделенных пробелом
state
(recommended)
Выполняет две функции: это ключ сессии (может использоваться как параметр состояния или для понимания, куда редиректнуть пользователя) и CSRF-токен (если для каждого запроса это значение уникально; необходимо перепроверять, что значение state не изменилость между запросом и ответом).
grant_type
(required)
Установлен в authorization_code
code
(required)
redirect_uri
(possible required)
Если параметр был включен в предыдущий запрос, то должен быть включен и в этот
client_id
(required)
Обязательно включение для идентификации клиента. Должен быть включен как POST-парамент, а не HTTP Basic Auth Header