Сквозная аутентификация
Как это работает
Если у вас есть несколько связанных сервисов, на которых пользователь авторизуется под одним аккаунтом, вы можете использовать сквозную аутентификацию (Single Sign-On/SSO). В качестве сервиса выступает веб-сайт игры. Это позволит пользователю вводить данные аутентификации только один раз. При переходе на один из связанных сервисов пользователь уже будет авторизован.
Сценарий взаимодействия
- Неавторизованный пользователь переходит на один из сервисов.
- Ваш клиент отправляет запрос
Check user authentication на сервер Xsolla Login и получает ошибку 401. - Ваш клиент отображает форму авторизации (виджет авторизации или ваш интерфейс) для пользователя.
- Пользователь выполняет аутентификацию по имени пользователя и паролю или через социальную сеть.
- Ваш клиент выполняет аутентификацию пользователя в вашем варианте авторизации:
- При интеграции через методы API используются следующие запросы:
- При интеграции через виджет авторизации для запросов используется протокол OAuth 2.0.
login_uri, содержащийredirect_uriвместе сcodeв query-параметре.
- Ваш клиент перенаправляет пользователя на
redirect_uri. - Ваш сервер отправляет запрос
Generate JWT для обмена полученногоcodeна JWT. Пользователь авторизован на сервисе. - Пользователь переходит на другой сервис.
- Ваш клиент отправляет запрос
Check user authentication на сервер Xsolla Login и получаетlogin_uri, содержащийredirect_uriвместе ccodeв query-параметре. - Ваш сервер отправляет запрос
Generate JWT для обмена полученногоcodeна JWT. Пользователь авторизован на втором сервисе.
%%{init: {'themeVariables': { 'noteBkgColor': 'transparent', 'noteBorderColor': 'transparent' }}}%%
sequenceDiagram
participant U as Пользователь
participant CS1 as Связанный сервис 1
participant XL as Сервер Xsolla Login
participant LW as Виджет авторизации
participant CS2 as Связанный сервис 2
U->>CS1: Открывает сервис
CS1->>XL: Отправляет запрос на проверку аутентификации пользователя
activate XL
XL-->>CS1: Сообщает, что пользователь не аутентифицирован (401)
deactivate XL
CS1->>LW: Открывает форму аутентификации
U->>LW: Вводит учетные данные
activate LW
LW->>XL: Аутентифицирует пользователя
deactivate LW
activate XL
XL-->>LW: Возвращает ссылку с кодом авторизации
deactivate XL
activate LW
LW-->>CS1: Перенаправляет пользователя по полученной ссылке
deactivate LW
activate CS1
CS1->>XL: Отправляет запрос на генерацию JWT пользователя
deactivate CS1
activate XL
XL-->>CS1: Возвращает JWT пользователя
deactivate XL
U->>CS2: Открывает другой сервис
activate CS2
CS2->>XL: Отправляет запрос на проверку аутентификации пользователя
deactivate CS2
activate XL
XL-->>CS2: Перенаправляет пользователя по полученной ссылке
deactivate XL
activate CS2
CS2->>XL: Отправляет запрос на генерацию JWT пользователя
deactivate CS2
activate XL
XL-->>CS2: Возвращает JWT пользователя
deactivate XL
Разделение прав доступа для разных сервисов
Чтобы обеспечить разделение прав доступа к аккаунту пользователя для разных сервисов, вы можете использовать в разных OAuth 2.0 клиентах специальные значения параметра scope=playfab.
Для кого подходит
Для партнеров, у которых уже подключен продукт Login и используется хранилище Xsolla, Firebase или PlayFab.
Как настроить
Чтобы подключить сквозную аутентификацию:
- Подключите протокол OAuth 2.0.
- Реализуйте вызов метода получения сессии пользователя.
Подключение протокола OAuth 2.0
Воспользуйтесь инструкцией для подключения протокола OAuth 2.0. Вы можете использовать один OAuth 2.0 клиент для всех сервисов или создать отдельный OAuth 2.0 клиент для каждого сервиса.
Вызов метода получения сессии пользователя
Реализуйте вызов метода
Пример запроса:
http
- http
- curl
1GET https://login.xsolla.com/api/oauth2/sso?client_id=<client_id>&redirect_uri=<redirect_uri>&scope=<scope>&state=<state>&response_type=code HTTP/1.1
1curl --request GET \
2 --url 'https://login.xsolla.com/api/oauth2/sso?redirect_uri=redirect_uri&response_type=code&state=state&scope=scope&client_id=client_id'
Пример ответа, когда пользователь авторизован:
- http
1HTTP/1.1 200 OK
2Content-Type: application/json
3
4{
5 "login_url": "<redirect_uri>?code=<code>"
6}
Чтобы получить JWT пользователя:
- Ваш клиент реализует и использует метод, который перенаправляет пользователя на полученный
redirect_uri. - Ваш сервер отправляет запрос
Generate JWT с полученнымcodeиgrant_type=authorization_codeдля получения JWT.
Пример ответа, когда пользователь не авторизован:
- http
1HTTP/1.1 401 Unauthorized
2Content-Type: application/json
3
4{
5 "error": {
6 "code": "003-040",
7 "description": "User is unauthorized."
8 }
9}
Нашли опечатку или ошибку в тексте? Выделите ее и нажмите Ctrl+Enter.