The signed_request string is a joint signature with the use of the HMAC SHA256 method for a base64-encoded data string in JSON format, point (.), and the base64-encoded data string itself in JSON format.
Data are signed by the secret key
of your application known to Admitad only. The signature helps you to get sure that the request was sent by Admitad. It is impossible to falsify signed_request
line without a secret key.
- The app ``secret key`` is available for the authorized publisher in their account (by clicking the “Show credentials” button).
Example of data transferred to the application:
{
'username': 'webmaster1',
'id': 13090,
'first_name': 'name',
'last_name': 'surname',
'algorithm': 'HMAC-SHA256',
'language': 'ru',
'access_token': '087d6cc437',
'refresh_token': '7521b7640c',
'expires_in': 604800
}
Description of data fields:
Name | Description |
---|---|
username | Login |
id | User ID |
first_name | User first name |
last_name | User last name |
algorithm | Algorithm used to create data signatures |
language | User language |
access_token | User access token |
refresh_token | Token used to refresh the access token |
expires_in | User token duration in seconds |
Example of Python 2.7 code for encoding data, where 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)
Example of Python 2.7 code for encoding data:
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
Example of signed data (the signed_request variable):
d3ddf1100c5e47a466cafe1e0dc8cb40a4f7bc3219744be1e049dd6d7a76450c.eyJ1c2Vybm
FtZSI6ICJhZHZlcnRpc2VyMSIsICJmaXJzdF9uYW1lIjogIm5hbWUiLCAibGFzdF9uYW1lIjogI
nN1cm5hbWUiLCAiYWxnb3JpdGhtIjogIkhNQUMtU0hBMjU2IiwgImxhbmd1YWdlIjogInJ1Iiwg
ImFjY2Vzc190b2tlbiI6ICIwODdkNmNjNDM3IiwgImV4cGlyZXNfaW4iOiA2MDgwMCwgImlkIjo
gMTMwOTAsICJyZWZyZXNoX3Rva2VuIjogIjc1MjFiNzY0MGMifQ==