Строка 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 2.7 для декодировки и проверки данных:
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.eyJ1c2Vybm
FtZSI6ICJhZHZlcnRpc2VyMSIsICJmaXJzdF9uYW1lIjogIm5hbWUiLCAibGFzdF9uYW1lIjogI
nN1cm5hbWUiLCAiYWxnb3JpdGhtIjogIkhNQUMtU0hBMjU2IiwgImxhbmd1YWdlIjogInJ1Iiwg
ImFjY2Vzc190b2tlbiI6ICIwODdkNmNjNDM3IiwgImV4cGlyZXNfaW4iOiA2MDgwMCwgImlkIjo
gMTMwOTAsICJyZWZyZXNoX3Rva2VuIjogIjc1MjFiNzY0MGMifQ==