Skip to content

Одноразовые токены ​

Одноразовый токен — это JWT, подписанный секретом вашего клиента, поэтому ваше приложение может проверить его самостоятельно, без обращения к Bito. Именно его Bito добавляет к URL вашего iframe-виджета, и он же нужен везде, где Bito передаёт браузеру данные, которым должен доверять ваш сервер.

Получение токена ​

Требуется сессия вошедшего пользователя Bito — не токен интеграции. Интеграция должна быть установлена в этом аккаунте, иначе запрос отклоняется с Integration is not installed.

Запрос

http
POST /auth/get-one-time-token
Authorization: Bearer <user_session_token>
Content-Type: application/json

{
    "client_id": "69c50a2d50f7b939923a469b"
}

Ответ

json
{
    "code": 0,
    "message": "Success",
    "data": "eyJhbGciOiJIUzI1NiIs..."
}

Поля токена ​

ПолеОписание
issИздатель: https://{subdomain}.{domain}
audПолучатель: redirect_uri вашего клиента
jtiУникальный идентификатор токена (UUID)
nbfВремя, раньше которого токен недействителен
account_idАккаунт клиента
user_idПользователь Bito, открывший ваше приложение
subdomainПоддомен аккаунта
client_idВаш OAuth client id
expИстекает через 24 часа после выдачи

Проверка ​

Токен подписан алгоритмом HS256 секретом вашего клиента. Проверьте подпись, прежде чем доверять содержимому.

js
import jwt from 'jsonwebtoken';

export function verifyOneTimeToken(token, secret, clientId) {
    // Бросает исключение при неверной подписи, истёкшем токене или токене «из будущего».
    const claims = jwt.verify(token, secret, { algorithms: ['HS256'] });

    if (claims.client_id !== clientId) throw new Error('токен принадлежит другому клиенту');

    return { accountId: claims.account_id, userId: claims.user_id };
}

WARNING

Не декодируйте токен без проверки подписи. jwt.decode прочитает любую строку из браузера; только jwt.verify доказывает, что токен выдал Bito.

TIP

jti уникален для каждого токена — сохраняйте увиденные значения, если хотите строго одноразовое использование. Bito сам факт использования не отслеживает.

Принимающая сторона целиком описана в разделе Виджет (iframe-приложение).

Bito 2.0 Integration API