Как настроить собственное хранилище
Как это работает
Для хранения пользовательских данных вы можете использовать собственное хранилище. Данные также записываются в базу данных Иксоллы. Пароль пользователя валидируется на стороне собственного хранилища.
При использования собственного хранилища вам доступны:
- Регистрация пользователей
- Аутентификация по имени пользователя и паролю
- Аутентификация без пароля по номеру телефона
- Аутентификация через социальные сети
- Сброс пароля пользователя
В качестве клиента может выступать виджет авторизации Иксоллы или ваше приложение, которое использует методы Login API. Сценарий взаимодействия клиента и сервера Авторизации Иксолла:
- Клиент отправляет запросы на сервер Авторизации Иксолла. Формат запросов описан в группах методов JWT и General.
- Сервер Авторизации Иксолла отправляет запросы на ваш сервер. Для валидации запросов используйте инструкцию.
- Сервер Авторизации Иксолла обрабатывает ответ от вашего сервера и возвращает результат клиенту.
- Клиент обрабатывает ответ.
Регистрация пользователя
- Клиент отправляет запрос
Register a new user на сервер Авторизации Иксолла. - Сервер Авторизации Иксолла отправляет запрос на URL для создания пользователя. Ответ на запрос должен иметь формат, описанный в инструкции.
Пример запроса:
- http
POST /registration HTTP/1.1
Host: example.com
Content-Type: application/json
Authorization: Bearer {JWT}
{
"email": "john@gmail.com",
"password": "123456"
}
- Информация о пользователе записывается в базу данных Иксоллы. При этом параметр
email отмечается как неподтвержденный. Письмо для подтверждения регистрации отправляется пользователю. - Если вы интегрировали виджет авторизации, пользователь перенаправляется на страницу с сообщением: Письмо со ссылкой для подтверждения аккаунта отправлено на {email}.
Аутентификация по имени пользователя и паролю
- Клиент отправляет запрос
Auth by username and password на сервер Авторизации Иксолла. - Сервер Авторизации Иксолла отправляет запрос на URL для проверки существования пользователя. Ответ на запрос должен иметь формат, описанный в инструкции.
Пример запроса:
- http
POST /authentication HTTP/1.1
Host: example.com
Content-Type: application/json
Authorization: Bearer {JWT}
{
"email": "john@gmail.com",
"password": "123456"
}
- Сервер Авторизации Иксолла генерирует JWT пользователя.
- Пользователь перенаправляется на login_url с query-параметром token. В параметр token записывается JWT пользователя.
Аутентификация без пароля по номеру телефона
- Клиент открывает форму аутентификации и предлагает пользователю ввести номер телефона.
- Пользователь вводит свой номер телефона.
- Клиент отправляет запрос
Start auth by phone number на сервер Авторизации Иксолла. - Клиент предлагает пользователю ввести код подтверждения.
- Пользователь вводит полученный код.
- Клиент отправляет запрос
Complete auth by phone number на сервер Авторизации Иксолла. - Если это первая авторизация пользователя, сервер Авторизации Иксолла отправляет запрос на URL для входа без пароля по номеру телефона. Ответ на запрос должен иметь формат, описанный в инструкции.
Пример запроса:
- http
POST /authentication/phone HTTP/1.1
Host: example.com
Content-Type: application/json
Authorization: Bearer {JWT}
{
"login": "+12025550140",
"type": "phone"
}
Аутентификация через социальные сети
Для получения информации о пользователе при аутентификации через социальные сети установите URL оповещения для аутентификации через социальную сеть. На него будет отправляться запрос с данными, полученными от социальной сети. Для подключения этой возможности передайте ваш URL оповещения для аутентификации через социальную сеть аккаунт-менеджеру проекта.
Сценарий аутентификации:
- Клиент отправляет запрос
Auth via social network на сервер Авторизации Иксолла. - Пользователь выполняет аутентификацию в социальной сети.
- Сервер Авторизации Иксолла обрабатывает данные пользователя, полученные от социальной сети, и отправляет запрос на URL оповещения для аутентификации через социальную сеть. Ответ на запрос должен иметь формат, описанный в инструкции.
Запрос содержит данные пользователя во временном токене в заголовке
Поле | Тип | Описание |
---|---|---|
exp | Unix Timestamp | Дата и время истечения JWT. Срок жизни JWT — 7 минут. Обязательный. |
iat | Unix Timestamp | Дата и время выдачи JWT. Обязательный. |
iss | string | Сервис, подписавший JWT: https://login.xsolla.com. Обязательный. |
request_type | string | Константа: gateway_request. Обязательный. |
xsolla_login_project_id | string (UUID) | ID вашего варианта авторизации в Личном кабинете. Обязательный. |
string | Email-адрес пользователя. | |
sub | string (UUID) | ID пользователя, записанный на стороне сервера Авторизации Иксолла. Обязательный. |
username | string | Имя пользователя. |
provider | string | Имя социальной сети, через которую пользователь авторизовался. Обязательный. |
id | string | ID пользователя в социальной сети. Обязательный. |
Пример полезных данных токена:
- json
{
"exp": 1573635020,
"iat": 1573634600,
"iss": "https://login.xsolla.com",
"request_type": "gateway_request",
"xsolla_login_project_id": "00000000-0000-0000-0000-000000000000",
"sub": "00000000-0000-0000-0000-000000000000",
"email": "example@test.com",
"username": "Smith707",
"provider": "google",
"id": "123",
}
Пример запроса:
- http
POST /social/authentication HTTP/1.1
Host: example.com
Content-Type: application/json
Authorization: Bearer {JWT}
{}
Сброс пароля пользователя
- Клиент отправляет запрос
Reset password на сервер Авторизации Иксолла. - Сервер Авторизации Иксолла отправляет письмо пользователю для подтверждения сброса пароля.
- Пользователь подтверждает сброс пароля в письме и переходит на страницу ввода нового пароля.
- Пользователь вводит новый пароль.
- Сервер Авторизации Иксолла отправляет запрос на URL для сброса пароля. Ответ на запрос должен иметь формат, описанный в инструкции.
Пример запроса:
- http
POST /reset HTTP/1.1
Host: example.com
Content-Type: application/json
Authorization: Bearer {JWT}
{
"username": "john@gmail.com",
"fields": {
"password": "NewPa$$word1"
}
}
Для кого подходит
Для партнеров, у которых уже подключен продукт Авторизация и аутентификация пользователей реализована по стандарту JWT.
Как настроить
Для взаимодействия сервера Авторизации Иксолла и клиента:
- Подключите собственное хранилище.
- Настройте обработку запросов от сервера Авторизации Иксолла.
Подключение собственного хранилища
- В Личном кабинете перейдите в раздел ваш вариант авторизации > Общие настройки.
- В блоке Хранилище данных пользователей выберите пункт Собственное хранилище.
- Введите URL для отправки запросов API:
- URL для проверки существования пользователя
- URL для создания пользователя
- URL для изменения пароля
- URL для изменения email
- URL для входа без пароля по номеру телефона
- Реализуйте API, который будет отвечать следующим образом:
- HTTP 200/HTTP 204 для успешных запросов. Если требуется, JSON с дополнительными данными пользователя можно разместить в теле ответа. Переданные данные записываются в JWT > параметр partner_data.
- Другие HTTP-коды для неуспешных запросов.
Настройка обработки запросов от сервера Авторизации Иксолла
Запросы от сервера Авторизации Иксолла отправляются на ваши URL с заголовком Authorization: Bearer <JWT>. JWT подписан секретным ключом вашего проекта.
Для валидации JWT:
- Скопируйте значение секретного ключа (Личный кабинет > ваш вариант авторизации > Общие настройки > Секретный ключ).
- Выберите библиотеку и передайте на вход функции валидации значение секретного ключа.
- Если валидация прошла успешно, декодируйте JWT и убедитесь, что в его структуре есть поля из таблицы ниже. Для декодирования вы можете найти и использовать библиотеку.
Поле | Тип | Описание |
---|---|---|
exp | Unix Timestamp | Дата и время истечения JWT. Срок жизни JWT — 7 минут. |
iat | Unix Timestamp | Дата и время выдачи JWT. |
iss | string | Сервис, подписавший JWT: https://login.xsolla.com. |
request_type | string | Константа: gateway_request. |
xsolla_login_project_id | string (UUID) | ID вашего варианта авторизации в Личном кабинете. |
Пример полезных данных токена:
- json
{
"exp": 1573635020,
"iat": 1573634600,
"iss": "https://login.xsolla.com",
"request_type": "gateway_request",
"xsolla_login_project_id": "00000000-0000-0000-0000-000000000000"
}