Авторизация в АСНА REST API
АСНА REST API поддерживает авторизацию на основе JWT токенов.
Для обращения к любому из ресурсов АСНА REST API требуется наличие JWT токена в заголовке Authorization HTTP запроса, с типом Bearer . При отсутствии токена API вернет 401
статус (Unauthorized), этот же статус вернется в случае, если время действия токена закончилось (токен выдается на определенное время). В обоих случаях нужно запросить новый токен.
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
Пример запроса
Успешный ответ
HTTP cтатус
Значение
200
ОК. Запрос к сервису авторизации прошел успешно, в теле ответа содержится JSON с информацией о выданном токене.
Пример ответа
{
"access_token" : "eyJhbGciOiJSUzI1NiIsImtpZCI6IjdGQzk0RDU4N0UzQzg4QUM0M0FDQkQyOEU0Njk4RDZCOTE3RkQyOUUiLCJ0eXAiOiJKV1QiLCJ4NXQiOiJmOGxOV0g0OGlLeERyTDBvNUdtTmE1Rl8wcDQifQ.eyJuYmYiOjE0OTE4MTIzNzUsImV4cCI6MTQ5MTgxNTk3NSwiaXNzIjoiaHR0cHM6Ly9zc28uYXNuYS5jbG91ZDoxODgxIiwiYXVkIjpbImh0dHBzOi8vc3NvLmFzbmEuY2xvdWQ6MTg4MS9yZXNvdXJjZXMiLCJhcGkiXSwiY2xpZW50X2lkIjoiRTQ1RDM0OTEtNzlFRS00RUVBLTkyQjItMjJDRUJFNEJCOEI1IiwiY2xpZW50X2FjY2VzcyI6WyJzdG9ja3MuZWRpdCIsInN0b2Nrcy5mdWxsX2FjY2VzcyIsInN0b2Nrcy52aWV3Il0sInNjb3BlIjpbImFwaSJdfQ.FNHlxnnNQJ5dCVZI31UdpRTYKvioWdd4ixKMTHYHw2YH4jrMku24VAuvo5jY5Vv4NuhgR9BaVa57xjwfym1RzZBTgPC40usszyDz1RGnxSX0gemg6yiECCoXvwkfB88dtAcYqm7zIrJab3OIc6dHJq87Yum2y0hA4estaIgDPabPQYCGCtBWm4Z6cbVXbHaZqsktAGGDGwUd0E8R3NvPsFuBwuWtwRAoMEb9qmIAx292vidNi8l6Q6uxZfIYCCoOjt1Cr9ToVRa0bEqEuk1tcnhmWdYdsX151UgpgSk9uLaW8rgV9R-XdKU2sKBVjvM2tQevwN_jHoP-fIHiDkrJEQ" ,
// (1)
"expires_in" : 3600 , // (2)
"token_type" : "Bearer" // (3)
}
Токен, используемый для авторизации в API
Время жизни токена в секундах, вы можете контролировать это значение для получения обновления токена. Значение может меняться
Схема авторизации
Неуспешный ответ
HTTP статус
Значение
400
Полученные службой данные содержат ошибки. Информация об ошибке возвращается в теле ответа. Например, при отсутствии аптеки с таким идентификатором выдается invalid_client
500
Ошибка сервиса. Если ошибка повторяется, сообщите, пожалуйста, разработчикам сервиса
Порядок выполнения авторизации на сервисах API
Получаем токен на сервере авторизации
Полученный токен (берется из поля access_token ответа от службы единой авторизации) сохраняется клиентским ПО и используется для запросов к API .
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
}
]
}
При получении от API статуса 401
(Unauthorized), т.е. по истечении срока годности токена, токен запрашивается повторно
Диаграммы авторизации
Flow
graph TD
A[Запрос токена в SSO] -->|200| B[Запрос к API]
B --> |Ответ| C{Проверка статуса ответа}
C ---> |401| A
C ---> |200, 201, 202, 204, 500 etc| B
Sequence
sequenceDiagram
autonumber
loop
Клиент->>+SSO: Хочу получить токен
SSO-->>-Клиент: Пожалуйста, вот токен
loop Пока статус ответа <> 401
Клиент->>+API: Выполни запрос (токен в заголовке)
API-->>+Клиент: Запрос выполнен, вот результат
Note over Клиент, API: Успешный запрос, токен принят
end
API-->>-Клиент: Запрос не выполнен, статус 401
Note over Клиент, API: Неуспешный запрос, токен не прошел проверку
end
3 июня 2024 г. 08:45:27
5 августа 2021 г. 09:36:05