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

Вызовы API

Пользовательские сессии

Пользовательская сессия идентифицируется сессионным токеном, который должен передаваться клиентом в заголовке Authorization:

Authorization: Bearer <session_token>

Чтобы авторизовать пользователя в сервисе API, клиенту нужно использовать вызовы аутентификации. При успешной аутентификации в поле ответа session_token передается сессионный токен. Ответ также содержит поле session_state, указывающее текущее состояние авторизации сессии. Код состояния сессии может быть одной из следующих строк:

authorized
Пользователь успешно аутентифицирован и авторизован. Клиент может выполнять обычные запросы к API используя полученный сессионный токен.
checkpassword
Чтобы авторизовать пользователя, клиенту нужно предоставить пароль пользователя в вызове auth/checkpassword, используя полученный временный сессионный токен. По успешной проверке возвращается новый сессионный токен с состоянием сессии authorized, checkotp или setpassword. Для дальнейших запросов должен использоваться этот новый токен.
checkotp
Чтобы авторизовать пользователя, клиенту нужно предоставить одноразовый код (OTP) в вызове auth/checkotp, используя полученный временный сессионный токен. По успешной проверке возвращается новый сессионный токен с состоянием сессии authorized или setpassword. Для дальнейших запросов должен использоваться этот новый токен.
setpassword
Пользователь успешно аутентифицирован и должен установить новый пароль, используя вызов auth/setpassword с полученным временным сессионным токеном. Когда новый пароль успешно установлен, возвращается новый сессионный токен с состоянием сессии authorized. Для дальнейших запросов должен использоваться этот новый токен.
recovery-checkotp
Чтобы восстановить доступ методом телефона, клиентскому приложению нужно предоставить одноразовый код (OTP) в вызове auth/recovery/checkotp, используя полученный временный сессионный токен. По успешной проверке возвращается новый сессионный токен с состоянием сессии recovery-setpassword. Для дальнейших запросов должен использоваться этот новый токен.
recovery-checkquestion
Чтобы восстановить доступ методом контрольного вопроса, клиентскому приложению нужно предоставить контрольный ответ в вызове auth/recovery/checkquestion, используя полученный временный сессионный токен. По успешной проверке возвращается новый сессионный токен с состоянием сессии recovery-setpassword. Для дальнейших запросов должен использоваться этот новый токен.
recovery-setpassword
Пользователь аутентифицирован для восстановления доступа и должен установить новый пароль, используя вызов auth/setpassword с полученным временным сессионным токеном. Когда новый пароль успешно установлен, клиентскому приложению следует начать обычный процесс аутентификации вызовом auth/login.
acceptdisclaimers
Пользователь успешно аутентифицирован и должен принять юридические соглашения, используя вызов auth/acceptdisclaimers с полученным временным сессионным токеном. Когда соглашения приняты, возвращается новый сессионный токен с состоянием сессии authorized. Для дальнейших запросов должен использоваться этот новый токен.

Сессионные токены

Для сессионных токенов используется формат JSON Web Tokens (JWT) с сериализацией JWS Compact Serialization. Клиентские приложения никогда не генерируют эти токены, но могут использовать информацию о сессии, закодированную в полях (claims) сессионного токена. Получить поля данных из токена JWT можно следующим способом:

  1. JWT состоит из трех частей, разделенных точками (.), для полезной нагрузки нужно извлечь вторую (среднюю) часть
  2. Текст полезной нагрузки нужно декодировать используя кодировку Base64url
  3. Декодированный текст полезной нагрузки это валидный JSON, который можно загрузить стандартными способами

Полезная нагрузка сессионных токенов содержит следующие поля, которые могут использовать клиентские приложения:

exp (integer)
Время истечения сессии в виде POSIX timestamp. Если с вызовом API, требующим авторизацию, передается истекший токен, будет возвращен код ошибки auth.token.expired со статусом HTTP 401.
session_state (string)
Код состояния сессии (описание см. выше). Если вызов API требует другое состояние сессии, будет возвращен код ошибки auth.session.invalid со статусом HTTP 401.