Описание строки signed_request

Строка signed_request - это объединение подписи методом HMAC SHA256 base64 кодированной строки данных в формате JSON, точки(.), и самой base64 кодированной строки данных в формате JSON.
Данные подписываются с помощью секретного ключа вашего приложения, который известен только Admitad. Подпись позволяет вам удостовериться, что запрос отправлен именно Admitad. Без секретного ключа приложения невозможно подделать строку signed_request.

Пример данных, передаваемых приложению:

{
    'username':         'webmaster1',
    'id':               13090,
    'first_name':       'name',
    'last_name':        'surname',
    'algorithm':        'HMAC-SHA256',
    'language':         'ru',
    'access_token':     '087d6cc437',
    'refresh_token':    '7521b7640c',
    'expires_in':       604800
}

Описание полей данных:

Название Описание
username Имя пользователя (login)
id Идентификатор пользователя
first_name Имя пользователя
last_name Фамилия пользователя
algorithm Алгоритм, используемый для создания подписи данных
language Язык пользователя
access_token Ключ доступа пользователя
refresh_token Ключ, используемый для обновления ключа доступа
expires_in Время действия ключа пользователя в секундах

Пример кода на Python 2.7 для кодировки данных, где client_secret = a0f8a8b241d8b8182a0ddd2e89f5b1:

import hmac
import json
from hashlib import sha256
from base64 import b64encode
data = {
    'username': 'advertiser1',
    'id': 13090,
    'first_name': 'name',
    'last_name': 'surname',
    'algorithm': 'HMAC-SHA256',
    'language': 'ru',
    'access_token': '087d6cc437',
    'refresh_token': '7521b7640c',
    'expires_in': 604800
}
data = b64encode(json.dumps(data))
signature = hmac.new(str(client_secret), msg=data, digestmod=sha256).hexdigest()
signed_request = '%s.%s' % (signature, data)

Пример кода на Python для кодировки данных:

import hmac
import json
from hashlib import sha256
from base64 import b64decode

def decode_data(signed_request):
    signature, encoded_data = signed_request.split('.', 1)
    data = json.loads(b64decode(encoded_data))
    if data.get('algorithm').upper() != 'HMAC-SHA256':
        return
    expected_signature = hmac.new(
        str(client_secret), msg=encoded_data, digestmod=sha256).hexdigest()
    if signature != expected_signature:
        return
    return data

Пример подписанных данных (переменная signed_request):

d3ddf1100c5e47a466cafe1e0dc8cb40a4f7bc3219744be1e049dd6d7a76450c.eyJ1c2VybmFtZSI6ICJhZHZlcnRpc2VyMSIsICJmaXJzdF9uYW1lIjogIm5hbWUiLCAibGFzdF9uYW1lIjogInN1cm5hbWUiLCAiYWxnb3JpdGhtIjogIkhNQUMtU0hBMjU2IiwgImxhbmd1YWdlIjogInJ1IiwgImFjY2Vzc190b2tlbiI6ICIwODdkNmNjNDM3IiwgImV4cGlyZXNfaW4iOiA2MDgwMCwgImlkIjogMTMwOTAsICJyZWZyZXNoX3Rva2VuIjogIjc1MjFiNzY0MGMifQ==