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 advertiser in their personal account (by clicking the "Show credentials" button).
Example of data transferred to the application:
{
'username': 'advertiser1',
'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 |
Below is an 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)
Below is an 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
Below is an example of signed data (the signed_request variable):
d3ddf1100c5e47a466cafe1e0dc8cb40a4f7bc3219744be1e049dd6d7a76450c.ey
J1c2VybmFtZSI6ICJhZHZlcnRpc2VyMSIsICJmaXJzdF9uYW1lIjogIm5hbWUiLCAibGFzdF9
uYW1lIjogInN1cm5hbWUiLCAiYWxnb3JpdGhtIjogIkhNQUMtU0hBMjU2IiwgImxhbmd1YWdlIjog
InJ1IiwgImFjY2Vzc190b2tlbiI6ICIwODdkNmNjNDM3IiwgImV4cGlyZXNfaW4iOiA2MDgwMCwgImlkI
jogMTMwOTAsICJyZWZyZXNoX3Rva2VuIjogIjc1MjFiNzY0MGMifQ==