Перейти к основному содержимому

API авторизация

В качестве механизма авторизации используется WSSE.

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

PUT/_api/v1/security/token

Для получения токена необходимо отправить PUT запрос по адресу /_api/v1/security/token со следующими параметрами:

ПараметрТип данныхОписание
usernamestringИмя пользователя
passwordstringПароль

При успешном выполнении будет возвращена структура вида:

{
"token": "QwERty..."
}

Использование токена

Необходимо сформировать специальный HTTP заголовок X-WSSE и передавать его в каждом запросе.

Пример генерации заголовка на языке PHP

$username = 'john.doe';
$token = 'QwERty...';

$nonce = hash('sha512', uniqid(true));
$created = date('r');
$digest = base64_encode(sha1(base64_decode($nonce) . $created . $token, true));

$request->setHeader('X-WSSE', 'UsernameToken Username="' . $username . '", PasswordDigest="' . $digest . '", Nonce="' . $nonce . '", Created="' . $created . '"');
ПараметрОписание
$usernameИмя пользователя
$tokenТокен авторизации
$nonceОдноразовый код (подробнее на wikipedia.ru)
$createdТекущее время в формате ISO 8601, например: 2004-02-12T15:19:21+00:00
$digestДайджест. Особое внимание следует обратить на то, что sha1 возвращает хэш в виде бинарных данных (второй аргумент true)

Пример генерации заголовка на Javascript

const CryptoJS = require('crypto-js');

const username = 'username';
const token = 'token';

// Генерируем уникальный nonce на каждый запрос
const nonce = CryptoJS.lib.WordArray.random(16).toString(CryptoJS.enc.Hex);
const created = new Date().toISOString();

// PasswordDigest = Base64(SHA1(nonce + created + token))
const digest = CryptoJS.SHA1(nonce + created + token);
const passwordDigest = CryptoJS.enc.Base64.stringify(digest);

// Собираем заголовок
const wsseHeader = `UsernameToken Username="${username}", PasswordDigest="${passwordDigest}", Nonce="${btoa(nonce)}", Created="${created}"`;