Перейти к содержанию

Авторизация в АСНА REST API⚓︎

АСНА REST API поддерживает авторизацию на основе JWT токенов.

Для обращения к любому из ресурсов АСНА REST API требуется наличие JWT токена в заголовке Authorization HTTP запроса, с типом Bearer. При отсутствии токена API вернет 401 статус (Unauthorized), этот же статус вернется в случае, если время действия токена закончилось (токен выдается на определенное время). В обоих случаях нужно запросить новый токен.

1
2
3
4
5
GET /v5/stores/BC164E55-B612-4A04-800B-34CCF10F6858/stocks HTTP/1.1
Host: api.asna.cloud
Authorization: Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6IjdGQzk0RDU4N0UzQzg4QUM0M0FDQkQyOEU0Njk4RDZCOTE3RkQyOUUiLCJ0eXAiOiJKV1QiLCJ4NXQiOiJmOGxOV0g0OGlLeERyTDBvNUdtTmE1Rl8wcDQifQ.eyJuYmYiOjE0OTE1NzY2MDcsImV4cCI6MTQ5MTU4MDIwNywiaXNzIjoiaHR0cHM6Ly9zc28uYXNuYS5jbG91ZDoxODgxIiwiYXVkIjpbImh0dHBzOi8vc3NvLmFzbmEuY2xvdWQ6MTg4MS9yZXNvdXJjZXMiLCJhcGkiXSwiY2xpZW50X2lkIjoiRTQ1RDM0OTEtNzlFRS00RUVBLTkyQjItMjJDRUJFNEJCOEI1IiwiY2xpZW50X2FjY2VzcyI6WyJzdG9ja3MuZWRpdCIsInN0b2Nrcy5mdWxsX2FjY2VzcyIsInN0b2Nrcy52aWV3Il0sInNjb3BlIjpbImFwaSJdfQ.OvGjvdbOk6QI3CNRyjOmj5mSrUZ7v1LjWRgH9TjwhNTTKiEaww1iEr8CnSKOfpGUdhkFGiup8kzvW0PIsqrVZHEx2r5gmT9SO6orznDg-ESprgjjiBC-uYSSTzK_WmPZp-cjP4OVt8ovGY3ncNhrTYFmBy0CJh0XBtMmO5IkE9ASxyaw5Ou5by0SaMTF8Vh9ocE0Uaj8xf-m6ivKQYv_4gEsKs6XEjKBN0khfZGOvv1qQJ4iBn-fVtOqPUpv1ypcOskGZhVHo200ZjvPalbemV-51D45k1KZcE_K9qiYK8Y1vX_lzRDSaQI30PACuQc-VpB-WcCMAtVEEuo0paL2fw
Content-Type: application/json
Cache-Control: no-cache

Получение токена⚓︎

Для выполнения запросов к API, необходимо получить JWT токен от службы единой авторизации облачных сервисов АСНА, расположенной по адресу https://sso.asna.cloud:5000

POST /connect/token

Описание⚓︎

Получение авторизационного токена

Параметры запроса⚓︎

Параметры этого запроса передаются в теле запроса, см. пример запроса

Имя Обяз. Описание
client_id Идентификатор аптеки по справочнику АСНА
client_secret Пароль аптеки, полученный от службы техподдержки или клиентского маркетинга
grant_type Тип авторизации. В данном случае всегда client_credentials

Заголовки запроса⚓︎

Имя Описание
Content-Type Должно иметь значение application/x-www-form-urlencoded

Пример запроса⚓︎

1
2
3
4
5
6
POST /connect/token HTTP/1.1
Host: sso.asna.cloud:5000
Content-Type: application/x-www-form-urlencoded
Cache-Control: no-cache

client_id=E45D3491-79EE-4EEA-92B2-22CEBE4BB8B5&client_secret=1234567&grant_type=client_credentials
1
2
3
4
5
6
7
8
9
var client = new RestClient("https://sso.asna.cloud:5000/connect/token");
client.Timeout = -1;
var request = new RestRequest(Method.POST);
request.AddHeader("Content-Type", "application/x-www-form-urlencoded");
request.AddParameter("client_id", "E45D3491-79EE-4EEA-92B2-22CEBE4BB8B5");
request.AddParameter("client_secret", "1234567");
request.AddParameter("grant_type", "client_credentials");
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
1
curl --location --request POST 'https://sso.asna.cloud:5000/connect/token' --header 'Content-Type: application/x-www-form-urlencoded' --data-urlencode 'client_id=E45D3491-79EE-4EEA-92B2-22CEBE4BB8B5' --data-urlencode 'client_secret=1234567' --data-urlencode 'grant_type=client_credentials'

Успешный ответ⚓︎

HTTP cтатус Значение
200 ОК. Запрос к сервису авторизации прошел успешно, в теле ответа содержится JSON с информацией о выданном токене.

Пример ответа⚓︎

1
2
3
4
5
{
  "access_token": "eyJhbGciOiJSUzI1NiIsImtpZCI6IjdGQzk0RDU4N0UzQzg4QUM0M0FDQkQyOEU0Njk4RDZCOTE3RkQyOUUiLCJ0eXAiOiJKV1QiLCJ4NXQiOiJmOGxOV0g0OGlLeERyTDBvNUdtTmE1Rl8wcDQifQ.eyJuYmYiOjE0OTE4MTIzNzUsImV4cCI6MTQ5MTgxNTk3NSwiaXNzIjoiaHR0cHM6Ly9zc28uYXNuYS5jbG91ZDoxODgxIiwiYXVkIjpbImh0dHBzOi8vc3NvLmFzbmEuY2xvdWQ6MTg4MS9yZXNvdXJjZXMiLCJhcGkiXSwiY2xpZW50X2lkIjoiRTQ1RDM0OTEtNzlFRS00RUVBLTkyQjItMjJDRUJFNEJCOEI1IiwiY2xpZW50X2FjY2VzcyI6WyJzdG9ja3MuZWRpdCIsInN0b2Nrcy5mdWxsX2FjY2VzcyIsInN0b2Nrcy52aWV3Il0sInNjb3BlIjpbImFwaSJdfQ.FNHlxnnNQJ5dCVZI31UdpRTYKvioWdd4ixKMTHYHw2YH4jrMku24VAuvo5jY5Vv4NuhgR9BaVa57xjwfym1RzZBTgPC40usszyDz1RGnxSX0gemg6yiECCoXvwkfB88dtAcYqm7zIrJab3OIc6dHJq87Yum2y0hA4estaIgDPabPQYCGCtBWm4Z6cbVXbHaZqsktAGGDGwUd0E8R3NvPsFuBwuWtwRAoMEb9qmIAx292vidNi8l6Q6uxZfIYCCoOjt1Cr9ToVRa0bEqEuk1tcnhmWdYdsX151UgpgSk9uLaW8rgV9R-XdKU2sKBVjvM2tQevwN_jHoP-fIHiDkrJEQ",
  "expires_in": 3600,
  "token_type": "Bearer"
}

Неуспешный ответ⚓︎

HTTP статус Значение
400 Полученные службой данные содержат ошибки. Информация об ошибке возвращается в теле ответа. Например, при отсутствии аптеки с таким идентификатором выдается invalid_client
500 Ошибка сервиса. Если ошибка повторяется, сообщите, пожалуйста, разработчикам сервиса

Порядок выполнения авторизации на сервисах API⚓︎

  1. Получаем токен на сервере авторизации
  2. Полученный токен (берется из поля access_token ответа от службы единой авторизации) сохраняется клиентским ПО и используется для запросов к API.

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    POST /v5/stores/BC164E55-B612-4A04-800B-34CCF10F6858/stocks HTTP/1.1
    Host: api.asna.cloud
    Authorization: Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6IjdGQzk0RDU4N0UzQzg4QUM0M0FDQkQyOEU0Njk4RDZCOTE3RkQyOUUiLCJ0eXAiOiJKV1QiLCJ4NXQiOiJmOGxOV0g0OGlLeERyTDBvNUdtTmE1Rl8wcDQifQ.eyJuYmYiOjE0OTE4MTIzNzUsImV4cCI6MTQ5MTgxNTk3NSwiaXNzIjoiaHR0cHM6Ly9zc28uYXNuYS5jbG91ZDoxODgxIiwiYXVkIjpbImh0dHBzOi8vc3NvLmFzbmEuY2xvdWQ6MTg4MS9yZXNvdXJjZXMiLCJhcGkiXSwiY2xpZW50X2lkIjoiRTQ1RDM0OTEtNzlFRS00RUVBLTkyQjItMjJDRUJFNEJCOEI1IiwiY2xpZW50X2FjY2VzcyI6WyJzdG9ja3MuZWRpdCIsInN0b2Nrcy5mdWxsX2FjY2VzcyIsInN0b2Nrcy52aWV3Il0sInNjb3BlIjpbImFwaSJdfQ.FNHlxnnNQJ5dCVZI31UdpRTYKvioWdd4ixKMTHYHw2YH4jrMku24VAuvo5jY5Vv4NuhgR9BaVa57xjwfym1RzZBTgPC40usszyDz1RGnxSX0gemg6yiECCoXvwkfB88dtAcYqm7zIrJab3OIc6dHJq87Yum2y0hA4estaIgDPabPQYCGCtBWm4Z6cbVXbHaZqsktAGGDGwUd0E8R3NvPsFuBwuWtwRAoMEb9qmIAx292vidNi8l6Q6uxZfIYCCoOjt1Cr9ToVRa0bEqEuk1tcnhmWdYdsX151UgpgSk9uLaW8rgV9R-XdKU2sKBVjvM2tQevwN_jHoP-fIHiDkrJEQ
    Content-Type: application/json
    Accept: application/json
    Cache-Control: no-cache
    
    {
       "date":"2017-03-30T05:23:59.3021523+00:00",
       "stocks":[
          {
             "prtId":"3c1aefcb-ecef-495b-b111-12ed420d78ca",
             "nnt":55310,
             "sku":"360715",
             "qnt":8,
             "doc":"№610535",
             "supInn":"3673614100",
             "supId":"197384c4-285b-4d52-912e-a2507ea2e296",
             "supDate":"2017-03-18T21:04:52.4770438+00:00",
             "nds":18,
             "gnvls":true,
             "dp":true,
             "man":"Ferry Inc",
             "series":"xu7a1a8m8lj4",
             "exp":"2020-02-08T00:00:00+00:00",
             "prcMan":787.38,
             "prcOpt":883.23,
             "prcRet":1137.53,
             "prcReestr":1327.25,
             "sumOpt":5988,
             "sumOptNds":7065.84,
             "mrGnvls":6.12,
             "tag":3
          }
       ]
    }
    
  3. При получении от API статуса 401 (Unauthorized), т.е. по истечении срока годности токена, токен запрашивается повторно

Схема авторизации⚓︎

Схема авторизации


Последнее обновление: 17 августа 2021 г. 11:14:40
Созданный: 5 августа 2021 г. 12:36:05

Комментарии

Back to top