Расположение:
POST /Device/Api/V1/Account/Login
Тело запроса:
{ "username": "логин пользователя (ИНН)", "password": "пароль", "deviceId": "уникальный идентификатор устройства с помощью которого осуществляется вход", "deviceName": "наименование устройства для отображения в его личном кабинете" }
Ответ:
{ "requestId":"идентификатор запроса сгенерированный на стороне сервера", "body": "__тело ответа__ (смотреть ниже)", "succeeded":"флаг ошибки (в случае если ошибка не имеет никакого отношения к бизнес-логике самого API)", "errors" : [ { "Code": "код ошибки (не число)", "Message": "описание ошибки" } ] }
Тело ответа имеет базовый тип LoginResponse:
{ "signInResult": "одно из значений перечисления (Succeeded, RequiresTwoFactor,IsLockedOut,IsNotAllowed,InvalidLoginAttempt)" }
Если аутентификация прошла успешно body будет выглядеть следующим образом:
{ "signInResult": "Succeeded", "persistentSessionToken" : "токен постоянной сессии который нужно сохранить на устройстве самым безопасным образом" }
Если требуется двух-факторная аутентификация body будет выглядеть следующим образом:
{ "signInResult":"RequiresTwoFactor", "twoFactorSessionToken" : "токен для временной сессии на период двух-факторной аутентификации (токен валиден в течение 30 минут)" }
Неправильный логин или пароль:
{ "signinResult":"InvalidLoginAttempt" }
Аккаунт заблокирован в результате нескольких попыток неправильного входа:
{ "signInResult":"IsLockedOut" }
Аккаунт деактивирован:
{ "signInResult":"IsNotAllowed" }
Получение информации о включенных методов 2-х факторной аутентификации пользователя
Расположение:
POST /Device/Api/V1/Account/EnabledTwoFactorMethods
Тело запроса:
{ "twoFactorSessionToken":"временная сессия полученая в результате аутентификации" }
Пример ответа:
{ "requestId":"идентификатор запроса сгенерированный на стороне сервера", "body": [ { "Method":"метод 2-х факторной аутентификации принимающе одно из значений: Sms,Telegram", "Enabled":"флаг означающий включен этот метод или нет" } ], "succeeded":"флаг ошибки (в случае если ошибка не имеет никакого отношения к бизнес-логике самого API, это может быть ошибка валидации или ошибка InternalServerError и так. далее)", "errors" : [ { "Code": "код ошибки (не число)", "Message": "описание ошибки" } ] }
Инциация запроса на отправку верификационного кода по методу Sms
Расположение: POST /Device/Api/V1/Sms/SendVerificationCode Тело запроса:
{ "twoFactorSessionToken":"временная сессия полученая в результате аутентификации" }
Пример ответа:
{ "requestId":"идентификатор запроса сгенерированный на стороне сервера", "succeeded":"флаг ошибки", "errors" : [ { "Code": "код ошибки (не число)", "Message": "описание ошибки" } ] }
Верификация через SMS
Расположение:
POST /Device/Api/V1/Sms/Login
Тело запроса:
{ "twoFactorSessionToken":"временная сессия полученая в результате аутентификации", "verificationCode":"код пришедший на устройство через смс" }
Ответ идентичен API /Device/Api/V1/Account/Login (имеет тип LoginResponse)
Инциация запроса на отправку верификационного кода по методу Telegram
Расположение:
POST /Device/Api/V1/Telegram/SendVerificationCode
Тело запроса:
{ "twoFactorSessionToken":"временная сессия полученая в результате аутентификации" }
Пример ответа:
{ "requestId":"идентификатор запроса сгенерированный на стороне сервера", "succeeded":"флаг ошибки", "errors" : [ { "Code": "код ошибки (не число)", "Message": "описание ошибки" } ] }
Верификация через Telegram
Расположение:
POST /Device/Api/V1/Telegram/Login
Тело запроса:
{ "twoFactorSessionToken":"временная сессия полученая в результате аутентификации", "verificationCode":"код пришедший на устройство через telegram" }
Ответ идентичен API /Device/Api/V1/Account/Login (имеет тип LoginResponse)
Расположение:
POST /connect/token
Тело запроса x-www-form-urlencoded:
grant_type=password client_id=[YOUR_CLIENT_ID] client_secret=[YOUR_CLIENT_SECRET] username=persistentSessionToken password=[ПИН код который пользователь установил в своем личном кабинете]
При правильном вводе ПИН-кода в связке с валидным значением persistentSessionToken будет сгенерирован access_token. Пример:
{ "access_token": "eyJhbGciOiJSUzI1NiIsImtpZCI6IjUzOTIxODNGNzUzRDc5ODJCMjQ0MDVCOTA1OUJCOUNCIiwidHlwIjoiYXQrand0In0.eyJuYmYiOjE1OTc5ODg3NjIsImV4cCI6MTU5Nzk5MjM2MiwiaXNzIjoiaHR0cHM6Ly9sb2NhbGhvc3Q6NzAwMSIsImNsaWVudF9pZCI6ImVnb3ZfbW9iaWxlX2FwcCIsInN1YiI6IjEwMDAwMDciLCJhdXRoX3RpbWUiOjE1OTc5ODg3NjIsImlkcCI6ImxvY2FsIiwianRpIjoiMTlGODY0RDA4Q0EyOEQ2RTAyNjAwODA3Nzc1MzZBN0MiLCJpYXQiOjE1OTc5ODg3NjIsInNjb3BlIjpbImRldmljZV9hcGkiLCJlbWFpbCIsIklkZW50aXR5U2VydmVyQXBpIiwibm90aWZpY2F0aW9uX2FwaSIsIm9wZW5pZCIsIm9yZ2FuaXphdGlvbnMiLCJwaG9uZSIsInByb2ZpbGUiLCJvZmZsaW5lX2FjY2VzcyJdLCJhbXIiOlsicHdkIl19.XuIcwzKbleuaqxBwc_pLgM-arYyFNg1gXKeRz8ftJqfPP0IcskkcpWHoQv5CEMF1lkHSaL7AquTZ0T4tduQsdByY7enH-OFy_VnuAz5YUL2GU3L0eJNNcpdzGsxtHENtejWd1JdPcJFjmEF9v8dmVnldAbDHD4LVy6tu-43nCbuMF3nHkePBhvvuwC1ZSOrLMdhV06gBqc-6t6Zb67AHZMyM7R7A33m5lq42rirfaSu2RdgLo9StRrs3vEOUrni4MsphdwQLVR_9TO2x8Gnudhuf5FMbWSiFbX7MTvao1mB-4GZzZZn3odpfWIw7zZJCxsQ8dohom_fJG6viktOBGg", "expires_in": 3600, "token_type": "Bearer", "refresh_token": "E1A5A63CD63A40E3FFA3985E16CC0C553239A05549EA9DA7775B61E6CA98625B", "scope": "device_api email IdentityServerApi notification_api offline_access openid organizations phone profile" }
В случае ввода неправильных данных ЕСИ сгенерирует ошибку имеющую структуру:
{ "error":"invalid_request", "error_description": "описание ошибки" }
Типы описаний ошибок:
Расположение:
POST /Identity/Api/Device/OnQrCodeScanned
Авторизация: НЕ ТРЕБУЕТСЯ
{ "id":"persistentSessionToken полученый в результате аутентификации", "code":"Значение QR-код" }
Ответ при успешной операции (статус 200)
{ "requestId":"идентификатор запроса", "succeeded":"true" }