Связанный выход пользователя (Logout Endpoint)
Обзор возможностей
Связанный выход пользователя позволяет завершить сессии авторизации по всех связанных с провайдером проектах. Выход выполняется через браузер пользователя.
Особенности:
- Средняя сложность интеграция.
- Подойдет всем проектам.
Как это работает:
- Клиентское приложение при авторизации пользователя хранит его токен доступа в сессии/куки.
- Во время выхода пользователя из учетной записи на стороне клиентского приложения необходимо перенаправить пользователя на специальный эндпоинт выхода (Logout Endpoint).
- Сервис авторизации для уже авторизованного пользователя выведет окно подтверждения.
- На странице подтверждения пользователь может выбрать нужное ему действие: продолжить или отмена для возврата.
- После любого выбора пользователь вернется в приложение клиента.
- Если выход подтверждается пользователем, то клиентское приложение должно прервать и удалить сессию/куки вместе с токеном доступа.
Перед завершением сессии сервер проверяет:
- Существование OAuth2-клиента.
- Корректность post_logout_redirect_uri.
- Принадлежность post_logout_redirect_uri зарегистрированному клиенту.
- Корректность параметров запроса.
После завершения logout пользователь перенаправляется обратно в клиентское приложение с результатом операции.
Поддерживается передача параметра state. Если он присутствовал в исходном запросе, он всегда возвращается клиенту без изменений.
Последовательность работы
- Пользователь открывает logout endpoint.
- Перенаправьте пользователя на logout [GET] /oauth2/logout и передайте необходимые параметры.
- Если параметры корректны и пользователь авторизован, отображается страница подтверждения выхода.
- Пользователь подтверждает logout.
- Система обрабатывает подтверждение:
- Пользовательская сессия завершается.
- Выполняется logout.
- Пользователь перенаправляется на post_logout_redirect_uri.
Если на шаге 4 пользователь отменяет logout (нажимает Cancel):
- Сессия не завершается.
- Пользователь перенаправляется обратно в клиентское приложение со статусом отмены.
Предварительные настройки
Для использования logout необходимо зарегистрировать список допустимых URI возврата (который затем передается в поле post_logout_redirect_uri).
Допускается регистрация одного или нескольких URI.
Во время обработки logout значение post_logout_redirect_uri, переданное клиентом, должно полностью совпадать с одним из зарегистрированных URI.
Пример значений:
- https://client.example.com/logout
- https://client.example.com/auth/logout
- https://localhost:3000/logout
Если URI отсутствует в списке зарегистрированных адресов, сервер возвращает ошибку invalid_client.
Проверить глобальные настройки сервиса и адреса (endpoint) можно по адресу: https://login.softline.ru/.well-known/openid-configuration. Это общая для всех сервисов информация.
Описание запроса
Endpoint: https://{instance}/oauth2/logout
Метод: GET
Описание: запускает завершение авторизованного доступа пользователя.
Перед обработкой запроса сервер выполняет следующие проверки.
- Параметр присутствует в запросе.
- URI является абсолютным.
- Используется схема http или https.
- URI зарегистрирован у указанного клиента в списке post_logout_redirect_uris.
Ответ на запрос
Возможные значения:
- logout_successful - успешный logout.
- user_cancelled - пользователь отменил logout.
Должен соответсвовать параметру state из вашего запроса. Соответствие подтверждает, что вы получили ответ на отправленный вами запрос.
Параметр передается только в случае ошибки.
Возможные значения:
- invalid_request - некорректные параметры запроса:
- отсутствует client_id и/или post_logout_redirect_uri;
- URI имеет неверный формат;
- URI использует неподдерживаемую схему.
- переданный client_id не найден;
- переданный client_id отозван (revoked);
- post_logout_redirect_uri не зарегистрирован у клиента.
Параметр передается только в случае ошибки.
Возможные значения:
- Для ошибки invalid_request
- client_id is required
- post_logout_redirect_uri is required
- Invalid post_logout_redirect_uri format
- post_logout_redirect_uri must use http or https scheme
- Для ошибки invalid_client
- Client not found
- Invalid client_id
- post_logout_redirect_uri is not registered for this clien
[HTTP 302] Успешный logout
В случае успешного logout, пользователь будет перенаправлен на redirect_uri со статусом logout_successful.
Например, если redirect_uri равен "https://localhost/logout", то пользователь будет перенаправлен на:
https://localhost/logout?status=logout_successful&state=s761MQGea2Yt...
[HTTP 302] Logout отменён пользователем
Если logout был отменен пользователем, то он будет перенаправлен на redirect_uri со статусом user_cancelled.
Например, если redirect_uri равен "https://localhost/logout", то пользователь будет перенаправлен на:
https://localhost/logout?status=user_cancelled&state=s761MQGea2Yt...
Ошибка
Ответ на ошибку зависит от того, смог ли сервер определить безопасный post_logout_redirect_uri, на который нужно вернуть ответ.
- Если безопасный post_logout_redirect_uri определен, то пользователь перенаправляется обратно в клиентское приложение.
Например, если redirect_uri равен "https://localhost/logout", то пользователь будет перенаправлен на:
[HTTP 302] https://localhost/logout?error=invalid_client&error_description=Client+not+found&state=s761MQGea2Yt... - Если безопасный post_logout_redirect_uri определить не удалось, то сервер возвращает [HTTP 401] и JSON
Например, отсутствует `post_logout_redirect_uri`:{ "error": "invalid_request", "message": "post_logout_redirect_uri is required" }