Описание строки signed_request¶
Строка signed_request - это объединение подписи методом HMAC SHA256 base64 кодированной строки данных в формате JSON, точки(.), и самой base64 кодированной строки данных в формате JSON.Данные подписываются с помощьюсекретного ключа
Вашего приложения, который известен только Admitad. Подпись позволяет вам удостовериться, что запрос отправлен именно Admitad. Без секретного ключа приложения невозможно подделать строку signed_request.
секретный ключ
приложения залогинившийся рекламодатель может получить в своем аккаунте (при нажатии кнопки «Показать учетные данные»).Пример данных, передаваемых приложению:
{ 'username': 'advertiser1', '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.eyJ1c2VybmFtZSI6ICJhZHZlcnRpc2VyMSIsICJmaXJzdF9uYW1lIjogIm5hbWUiLCAibGFzdF9uYW1lIjogInN1cm5hbWUiLCAiYWxnb3JpdGhtIjogIkhNQUMtU0hBMjU2IiwgImxhbmd1YWdlIjogInJ1IiwgImFjY2Vzc190b2tlbiI6ICIwODdkNmNjNDM3IiwgImV4cGlyZXNfaW4iOiA2MDgwMCwgImlkIjogMTMwOTAsICJyZWZyZXNoX3Rva2VuIjogIjc1MjFiNzY0MGMifQ==