Подписание запросов API

Подпись добавляется в запрос API в заголовок X-YaCourier-Signature.

Для вычисления подписи используется секрет из 32 символов (нужно получить через клиентского менеджера или службу поддержки) и алгоритм SHA-256. После вычисления подпись переводится в HEX-представление.

В формировании подписи участвуют:

  • User agent;
  • метод запроса — POST, GET;
  • Request-URI — начинается с /, хост не указывается;
  • тело сообщения.

Общее описание алгоритма:

items_to_sign = { user_agent, method, " ", uri, body }
signature = HMAC(<secret>)

for item in items_to_sign:
    signature = HMAC(signature, item)

headers['X-YaCourier-Signature'] = hex_encode(signature)

Пример для секрета cb6628c7407fd3c570bebbd7c36731f1 (случайно сгенерированный):

import hashlib
import hmac

KEY = "cb6628c7407fd3c570bebbd7c36731f1"
USER_AGENT = "TestUserAgent"
URI = "/test/uri"
BODY = "TestBody"

def gen_signature(key, parts):
    HMAC = hmac.new(key.decode('hex'), None, digestmod=hashlib.sha256)
    for part in parts:
        HMAC.update(part)
    return HMAC.hexdigest()

print gen_signature(KEY, [USER_AGENT, "POST", " ", URI, BODY])
import hashlib
import hmac

KEY = "cb6628c7407fd3c570bebbd7c36731f1"
USER_AGENT = "TestUserAgent"
URI = "/test/uri"
BODY = "TestBody"

def gen_signature(key, parts):
    HMAC = hmac.new(bytes.fromhex(key), None, digestmod=hashlib.sha256)
    for part in parts:
        HMAC.update(part.encode('utf-8'))
    return HMAC.hexdigest()

print(gen_signature(KEY, [USER_AGENT, "POST", " ", URI, BODY]))

Результат:

47abf7284eab22da90f591ff981bc0c4630a8e3a38c9e1cf8d881eb952c22333

Написать в службу поддержки
Предыдущая
Следующая