Авторизация / Сквозная аутентификация

Сквозная аутентификация

Как это работает

Если у вас есть несколько связанных сервисов, на которых пользователь авторизуется под одним аккаунтом, вы можете использовать сквозную аутентификацию (Single Sign-On/SSO). В качестве сервиса выступает веб-сайт игры. Это позволит пользователю вводить данные аутентификации только один раз. При переходе на один из связанных сервисов пользователь уже будет авторизован.

Сценарий взаимодействия

  1. Неавторизованный пользователь переходит на один из сервисов.
  2. Ваш клиент отправляет запрос Check user authentication на сервер Авторизации Иксолла и получает ошибку 401.
  3. Ваш клиент отображает форму авторизации (виджет авторизации или ваш интерфейс) для пользователя.
  4. Пользователь выполняет аутентификацию по имени пользователя и паролю или через социальную сеть.

  1. Ваш клиент выполняет аутентификацию пользователя в вашем варианте авторизации:
    • При интеграции через методы API используются следующие запросы:
      • Аутентификация по имени пользователя и паролю (JWT и OAuth 2.0).
      • Аутентификация через социальные сети (JWT и OAuth 2.0).
    • При интеграции через виджет авторизации для запросов используется протокол OAuth 2.0.
    В ходе аутентификации сессия пользователя запоминается на сервере Авторизации Иксолла. Сервер отправляет login_uri, содержащий redirect_uri вместе c code в query-параметре.

  1. Ваш клиент перенаправляет пользователя на redirect_uri.
  2. Ваш сервер отправляет запрос Generate JWT для обмена полученного code на JWT. Пользователь авторизован на сервисе.
  3. Пользователь переходит на другой сервис.
  4. Ваш клиент отправляет запрос Check user authentication на сервер Авторизации Иксолла и получает login_uri, содержащий redirect_uri вместе c code в query-параметре.
  5. Ваш сервер отправляет запрос Generate JWT для обмена полученного code на JWT. Пользователь авторизован на втором сервисе.

Разделение прав доступа для разных сервисов

Чтобы обеспечить разделение прав доступа к аккаунту пользователя для разных сервисов, вы можете использовать в разных OAuth 2.0 клиентах специальные значения параметра scope, например scope=playfab.

Для кого подходит

Для партнеров, у которых уже подключен продукт Авторизация и используется хранилище Хранилище Иксоллы или PlayFab.

Как настроить

Чтобы подключить сквозную аутентификацию:

  1. Подключите протокол OAuth 2.0.
  2. Реализуйте вызов метода получения сессии пользователя.

Подключение протокола OAuth 2.0

Воспользуйтесь инструкцией для подключения протокола OAuth 2.0. Вы можете использовать один OAuth 2.0 клиент для всех сервисов или создать отдельный OAuth 2.0 клиент для каждого сервиса.

Вызов метода получения сессии пользователя

Реализуйте вызов метода Check user authentication при переходе на ваш сервис. Запрос должен выполниться до отображения формы авторизации. Для аутентификации используйте параметры OAuth 2.0 клиента именно того сервиса, на котором пользователь хочет авторизоваться.

Пример запроса:

Copy
Full screen
Small screen
GET /api/oauth2/sso?client_id=<client_id>&redirect_uri=<redirect_uri>&scope=<scope>&state=<state>&response_type=code HTTP/1.1
Host: login.xsolla.com

Пример ответа, когда пользователь авторизован:

Copy
Full screen
Small screen
HTTP/1.1 200 OK
Content-Type: application/json

{
  "login_url": "<redirect_uri>?code=<code>"
}

Чтобы получить JWT пользователя:

  1. Ваш клиент реализует и использует метод, который перенаправляет пользователя на полученный redirect_uri.
  2. Ваш сервер отправляет запрос Generate JWT с полученным code и grant_type=authorization_code для получения JWT.

Пример ответа, когда пользователь не авторизован:

Copy
Full screen
Small screen
HTTP/1.1 401 Unauthorized
Content-Type: application/json

{
  "error": {
    "code": "003-040",
    "description": "User is unauthorized."
  }
}