Аутентификация и авторизация¶
Вызовы 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 можно следующим способом:
- JWT состоит из трех частей, разделенных точками (
.), для полезной нагрузки нужно извлечь вторую (среднюю) часть - Текст полезной нагрузки нужно декодировать используя кодировку Base64url
- Декодированный текст полезной нагрузки это валидный JSON, который можно загрузить стандартными способами
Полезная нагрузка сессионных токенов содержит следующие поля, которые могут использовать клиентские приложения:
- exp (integer)
- Время истечения сессии в виде POSIX timestamp. Если с вызовом API, требующим авторизацию, передается истекший токен, будет возвращен код ошибки
auth.token.expiredсо статусом HTTP 401. - session_state (string)
- Код состояния сессии (описание см. выше). Если вызов API требует другое состояние сессии, будет возвращен код ошибки
auth.session.invalidсо статусом HTTP 401.