# Описание строки signed_request
Строка signed\_request — это объединение подписи методом [HMAC](http://en.wikipedia.org/wiki/HMAC) [SHA256](http://en.wikipedia.org/wiki/SHA-2) [base64 кодированной строки](http://en.wikipedia.org/wiki/Base64#URL_applications) данных в формате JSON, точки (.), и самой [base64 кодированной строки](http://en.wikipedia.org/wiki/Base64#URL_applications) данных в формате JSON.

Данные подписываются с помощью секретного ключа Вашего приложения, который известен только Admitad. Подпись позволяет вам удостовериться, что запрос отправлен именно Admitad. Без секретного ключа приложения невозможно подделать строку signed\_request.

*   секретный ключ приложения залогинившийся *веб-мастер может получить в* [*своем аккаунте*](https://www.admitad.com/ru/webmaster/account/settings/credentials) *(при нажатии кнопки «Показать учетные данные»).*

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

```
{  
    '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):

```markdown
d3ddf1100c5e47a466cafe1e0dc8cb40a4f7bc3219744be1e049dd6d7a76450c.eyJ1c2Vybm  
FtZSI6ICJhZHZlcnRpc2VyMSIsICJmaXJzdF9uYW1lIjogIm5hbWUiLCAibGFzdF9uYW1lIjogI  
nN1cm5hbWUiLCAiYWxnb3JpdGhtIjogIkhNQUMtU0hBMjU2IiwgImxhbmd1YWdlIjogInJ1Iiwg  
ImFjY2Vzc190b2tlbiI6ICIwODdkNmNjNDM3IiwgImV4cGlyZXNfaW4iOiA2MDgwMCwgImlkIjo  
gMTMwOTAsICJyZWZyZXNoX3Rva2VuIjogIjc1MjFiNzY0MGMifQ==
```