Войти

Аутентификация в API

Чтобы делать запросы к API, вам необходимо собрать первые данные по проекту и получить доступ к API. Полученные для аутентификации API User ID и Секретный ключ используйте в подписи каждого запроса.

Аутентификация и создание подписи

На текущий момент поддерживается только один способ создания подписи и аутентификации в API — HMAC SHA1.

Общая последовательность действий:

  1. Создайте базовую строку.
    Базовая строка создается путем соединения через символ амперсанд &:
    • Метода запроса (GET/POST)
    • Полного URL-адреса (с указанием протокола, имени хоста, включая все GET-параметры), закодированного посредством urlencode-преобразования
    • Тело запроса, закодированное посредством urlencode-преобразования
    Например, для GET запроса на URL https://tracker.my.com/api/raw/v1/export/get.json получим следующую базовую строку:
    GET&https%3A%2F%2Ftracker.my.com%2Fraw%2Fv1%2Fexport%2Fget.json&
  2. Создайте HMAC-SHA1 подпись.
    Подпись создается с использованием полученной ранее базовой строки и вашего Секретного ключа к API, которые необходимо пропустить через HMAC-SHA1 алгоритм шифрования, а его результат закодировать base64 алгоритмом:
    Base64-encode(HMAC-SHA1(базовая строка, секретный ключ))
  3. Добавьте к запросу http-заголовок.
    Чтобы передать полученную подпись в запросе, необходимо к запросу добавить http-заголовок Authorization, в котором указать:
    • Тип аутентификации = AuthHMAC
    • Ваш API User ID
    • Полученную ранее подпись
    Authorization: AuthHMAC APIUserID:подпись
    Пример:
    Authorization: AuthHMAC 87657:3RT1/n0b73A63xLDnb0wrvFPMC8=

Пример вычисления

Входные параметры

  • API User ID: 77658
  • Секретный ключ к API: 72d2erEtbynf6f7ZYTsYKnb7
  • Метод: GET
  • Полный URL: https://tracker.my.com/api/raw/v1/export/get.json?idReport=4

В результате получаем

  • Базовая строка:
    GET&https%3A%2F%2Ftracker.my.com%2Fapi%2Fraw%2Fv1%2Fexport%2Fget.json%3FidReport%3D4&
  • Подпись:
    PqrQR8zsgQU9Qcocjp6T6hnjF8Y=
  • http-заголовок:
    Authorization: AuthHMAC 77658:PqrQR8zsgQU9Qcocjp6T6hnjF8Y=

Примеры исходного кода

from urllib.parse import quote
from binascii import b2a_base64
from hashlib import sha1
from hmac import new

def get_signature(api_user_id, secret_key, url, method='GET', post_data=None):
    method = method.upper()
    data = post_data if post_data else ''
    string = '%s&%s&%s' % (
        method,
        quote(url, safe='~'),
        quote(data, safe='~')
    )

    signature = b2a_base64(
        new(
            bytearray(secret_key, 'utf-8'),
            bytearray(string, 'utf-8'),
            sha1
        ).digest()).decode().rstrip('\n')

    return 'AuthHMAC %s:%s' % (api_user_id, signature)
function getSignature($APIUserId, $secretKey, $url, $method='GET', $post_data=null) {
    $method = strtoupper($method);
    $data = $post_data ? $post_data : '';
    $string = sprintf('%s&%s&%s', $method, rawurlencode($url), rawurlencode($data));
    $signature = base64_encode(hash_hmac('sha1', $string, $secretKey, true));
    return sprintf('AuthHMAC %s:%s', $APIUserId, $signature);
} 
Была ли эта статья полезна?