Инструменты пользователя

Инструменты сайта


iis-device-2fa

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
iis-device-2fa [2020/06/10 03:38]
admin1
iis-device-2fa [2020/09/16 12:21] (текущий)
admin1
Строка 1: Строка 1:
-====== Схема взаимодействия ЕСИА с мобильным приложением ====== +====== Схема взаимодействия ЕСИ с мобильным приложением ======
-===== Привязка устройства к аккаунту ​=====+
  
-Расположение: ​ 
  
-  ​POST /Identity/Api/Device/Bind+===== Аутентификация ===== 
 + 
 +Расположение:​ 
 +  ​POST /Device/Api/V1/Account/Login 
 +Тело запроса:​
   ​   ​
-Авторизация: __ОБЯЗАТЕЛЬНА__+  { 
 +    "​username":​ "​логин пользователя (ИНН)",​ 
 +    "​password":​ "пароль",​ 
 +    "​deviceId":​ "уникальный ​идентификатор устройства с помощью которого осуществляется вход",​ 
 +    "​deviceName"​"​наименование устройства для отображения в его личном кабинете"​ 
 +  } 
 +  
 +Ответ:
  
-Запрос:+  { 
 +    "​requestId":"​идентификатор запроса сгенерированный на стороне сервера",​ 
 +    "​body":​ "​__тело ответа__ (смотреть ниже)",​ 
 +    "​succeeded":"​флаг ошибки (в случае если ошибка не имеет никакого отношения к бизнес-логике самого API)",​ 
 +    "​errors"​ : [ 
 +      { 
 +        "​Code":​ "​код ошибки (не число)",​ 
 +        "​Message":​ "​описание ошибки"​ 
 +      } 
 +    ] 
 +  } 
 + 
 +__//​Тело ответа//​__ имеет базовый тип LoginResponse:
  
   {   {
-     "deviceId": "Уникальный идентификатор устройства", ​  +    ​"signInResult": "одно из значений перечисления (Succeeded, RequiresTwoFactor,​IsLockedOut,​IsNotAllowed,​InvalidLoginAttempt)"​ 
-     ​"deviceName": "Наименование устройства, чтобы пользователь ​мог распознать его в личном кабинете"+  } 
 + 
 +Если аутентификация прошла ​успешно body будет выглядеть следующим образом: 
 + 
 +  { 
 +    "​signInResult":​ "​Succeeded", 
 +    "persistentSessionToken" : "токен постоянной сессии который нужно сохранить на устройстве самым безопасным образом"​
   }   }
   ​   ​
-Ответ при успешной операции (код статуса 200): 
  
 +Если требуется двух-факторная аутентификация body будет выглядеть следующим образом:​
 +
 +  {
 +    "​signInResult":"​RequiresTwoFactor",​
 +    "​twoFactorSessionToken"​ : "​токен для временной сессии на период двух-факторной аутентификации (токен валиден в течение 30 минут)"​
 +  }
 +  ​
 +Неправильный логин или пароль:​
 +  ​
   {   {
-     "id":"​Код привязки" ​ +    ​"signinResult":"​InvalidLoginAttempt"
   }   }
  
-**Код привязки нужно сохранить в устройстве**+Аккаунт ​заблокирован в результате ​нескольких попыток неправильного входа: 
 +   
 +  { 
 +    "​signInResult":"​IsLockedOut"​ 
 +  }
  
-Ответ при ошибках:+Аккаунт деактивирован: 
 +   
 +  { 
 +    "​signInResult"​:"​IsNotAllowed"​ 
 +  }
  
-  * Пустое тело сообщение ​(код ответа ​400):+====== Двух-факторная аутентификация ====== 
 +//Получение ​информации о включенных методов ​2-х факторной аутентификации пользователя//​
  
 +Расположение:​
 +  POST /​Device/​Api/​V1/​Account/​EnabledTwoFactorMethods
 +Тело запроса:​
  
   {   {
-    "​requestId":"​идентификатор сообщения", +    ​"​twoFactorSessionToken":"​временная сессия полученая в результате аутентификации"​ 
-    "​succeeded":"​false", +  } 
-    "​errors":​ [ + 
-        +Пример ответа:​ 
-           ​"code":"​InvalidJsonFormat", + 
-           ​"message":"​сообщеине"​ +  { 
-        }+    ​"​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)
 +
 +====== Получение access_token от ЕСИ через метод Resource Owner Password Validation Flow======
 +
 +Расположение:​
 +  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":​ "​описание ошибки"​
 +  }
 +
 +Типы описаний ошибок:​
 +  - no session found (не валидная сессия)
 +  - pre sign-in check failed (аккаунт либо заблокирован либо деактивирован)
 +  - user is blocked (превышено допустимое количество неправильного ввода ПИН-кода)
 +  - user has no pin code (пользователь не установил ПИН код в личном кабинете)
 +  - invalid username or password (неправильный ПИН код)
 +  - internal server error (внутренняя ошибка сервера)
 +
 +
 +====== Отправка отсканнированного значения qr-code на сервер при двух-факторной аутентификации через WEB браузер. ======
 +
 +
 +Расположение: ​
 +
 +  POST /​Identity/​Api/​Device/​OnQrCodeScanned
 +  ​
 +Авторизация:​ НЕ ТРЕБУЕТСЯ
 +
 +  {
 +    "​id":"​persistentSessionToken полученый в результате аутентификации",​
 +    "​code":"​Значение QR-код"​
 +  }
 +
 +Ответ при успешной операции (статус 200)
 +
 +  {
 +    "​requestId":"​идентификатор запроса",​
 +    "​succeeded":"​true"​
   }   }
  
  
iis-device-2fa.1591760332.txt.gz · Последние изменения: 2020/06/10 03:38 — admin1