Сервис авторизации FairyWorld
Это сервис единого входа для платформы FairyWorld. Сторонние приложения могут авторизовывать пользователей через единый аккаунт по протоколу OAuth 2.0 (Authorization Code) — «Войти через FairyWorld».
Главная страница и эндпоинты
Главная страница (/) — приветственная: описание сервиса и краткая информация для интеграторов. Форма входа и поток авторизации доступны по эндпоинтам ниже.
| Назначение | URL | Метод |
|---|---|---|
| Запрос авторизации (редирект пользователя) | /oauth/authorize | GET |
| Форма входа (показывается при необходимости) | /oauth/login | GET / POST |
| Подтверждение доступа (согласие) | /oauth/authorize-approve | POST |
| Обмен кода на токен | /oauth/token | POST |
| Данные пользователя | /oauth/userinfo | GET или POST |
Ссылка «Войти через FairyWorld»
Направьте пользователя по ссылке:
http://auth.fairyland.world/oauth/authorize?client_id=ВАШ_CLIENT_ID&redirect_uri=ВАШ_REDIRECT_URI&response_type=code&scope=email%20fio&state=ВАШ_STATE
Обязательные параметры:
client_id— идентификатор клиента (выдаётся при регистрации приложения).redirect_uri— URI, на который вернётся пользователь после согласия. Должен точно совпадать с одним из URI, зарегистрированных для клиента.response_type— всегдаcode.scope— запрашиваемые права (через пробел):email,fio(см. ниже).state— строка для защиты от CSRF; сохраните её и проверьте при приёме редиректа.
После входа и согласия пользователь будет перенаправлен на:
ВАШ_REDIRECT_URI?code=ОДНОРАЗОВЫЙ_КОД&state=ВАШ_STATE
Код действителен 10 минут и предназначен для однократного обмена на access_token.
Обмен code на access_token
Запрос:
POST /oauth/token HTTP/1.1
Content-Type: application/x-www-form-urlencoded
grant_type=authorization_code&code=ПОЛУЧЕННЫЙ_КОД&client_id=ВАШ_CLIENT_ID&client_secret=ВАШ_CLIENT_SECRET&redirect_uri=ВАШ_REDIRECT_URI
redirect_uri при обмене должен совпадать с тем, что использовался в запросе authorize.
Ответ (успех):
{
"access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9...",
"token_type": "Bearer",
"expires_in": 15552000
}
Ошибки возвращаются с HTTP 400 и текстом в теле ответа.
Запрос данных пользователя (userinfo)
Запрос:
GET /oauth/userinfo HTTP/1.1
Authorization: Bearer ВАШ_ACCESS_TOKEN
или
POST /oauth/userinfo HTTP/1.1
Authorization: Bearer ВАШ_ACCESS_TOKEN
Ответ (успех): JSON с полями в зависимости от выданного scope:
id— идентификатор пользователя (всегда).email— email (если в scope был переданemail).name_first,name_last— имя и фамилия (если в scope был переданfio).
Пример при scope email fio:
{
"id": "42",
"email": "user@example.com",
"name_first": "Иван",
"name_last": "Петров"
}
Скоупы (scope)
| scope | Описание | Поля в userinfo |
|---|---|---|
email | Доступ к email регистрации | email |
fio | Имя и фамилия | name_first, name_last |
Можно запрашивать один или оба: scope=email, scope=fio или scope=email fio. Сервер вернёт только те scope, которые разрешены для вашего клиента и были подтверждены пользователем.