Сервис авторизации FairyWorld

Это сервис единого входа для платформы FairyWorld. Сторонние приложения могут авторизовывать пользователей через единый аккаунт по протоколу OAuth 2.0 (Authorization Code) — «Войти через FairyWorld».

Главная страница и эндпоинты

Главная страница (/) — приветственная: описание сервиса и краткая информация для интеграторов. Форма входа и поток авторизации доступны по эндпоинтам ниже.

НазначениеURLМетод
Запрос авторизации (редирект пользователя)/oauth/authorizeGET
Форма входа (показывается при необходимости)/oauth/loginGET / POST
Подтверждение доступа (согласие)/oauth/authorize-approvePOST
Обмен кода на токен/oauth/tokenPOST
Данные пользователя/oauth/userinfoGET или POST

Направьте пользователя по ссылке:

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, которые разрешены для вашего клиента и были подтверждены пользователем.