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

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


iis-device-2fa

Различия

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

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

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
Последняя версия Следующая версия справа и слева
iis-device-2fa [2020/08/21 03:38]
admin1
iis-device-2fa [2020/08/21 05:47]
admin1
Строка 1: Строка 1:
 ====== Схема взаимодействия ЕСИА с мобильным приложением ====== ====== Схема взаимодействия ЕСИА с мобильным приложением ======
 +
  
 ===== Аутентификация ===== ===== Аутентификация =====
Строка 18: Строка 19:
   {   {
     "​requestId":"​идентификатор запроса сгенерированный на стороне сервера",​     "​requestId":"​идентификатор запроса сгенерированный на стороне сервера",​
-    "​body":​ "​тело ответа",​+    "​body":​ "__тело ответа__ (смотреть ниже)",
     "​succeeded":"​флаг ошибки (в случае если ошибка не имеет никакого отношения к бизнес-логике самого API)",     "​succeeded":"​флаг ошибки (в случае если ошибка не имеет никакого отношения к бизнес-логике самого API)",
     "​errors"​ : [     "​errors"​ : [
Строка 28: Строка 29:
   }   }
  
-Тело ответа ​может принимать следующие значения в зависимости от результата аутентификации:​ +__//Тело ответа//__ имеет базовый тип ​LoginResponse:
- +
-Успешная аутентификация:+
  
   {   {
-    "​signInResult":"​Succeeded",​ +    "​signInResult":​ "одно из значений ​перечисления (Succeeded, RequiresTwoFactor,​IsLockedOut,​IsNotAllowed,​InvalidLoginAttempt)"
-    "​persistentSessionToken":​ "токен постоянной сессии который ​нужно сохранить на устройстве самым безопасным образом"+
   }   }
  
 +Если аутентификация прошла успешно body будет выглядеть следующим образом:​
  
 +  {
 +    "​signInResult":​ "​Succeeded",​
 +    "​persistentSessionToken"​ : "​токен постоянной сессии который нужно сохранить на устройстве самым безопасным образом"​
 +  }
 +  ​
  
-===== Привязка устройства к аккаунту ​=====+Если требуется двух-факторная аутентификация body будет выглядеть следующим образом:​
  
-Расположение: ​+  { 
 +    "​signInResult":"​RequiresTwoFactor",​ 
 +    "​twoFactorSessionToken"​ : "​токен для временной ​сессии на период двух-факторной аутентификации (токен валиден в течение 30 минут)"​ 
 +  } 
 +   
 +Неправильный логин или пароль:​ 
 +   
 +  { 
 +    "​signinResult"​:"​InvalidLoginAttempt"​ 
 +  }
  
-  POST /​Identity/​Api/​Device/​Bind+Аккаунт заблокирован в результате нескольких попыток неправильного входа:
   ​   ​
-Авторизация__ОБЯЗАТЕЛЬНА__ (this endpoint requires access_token)+  { 
 +    "​signInResult"​:"​IsLockedOut"​ 
 +  }
  
-Запрос:+Аккаунт деактивирован:​ 
 +   
 +  { 
 +    "​signInResult":"​IsNotAllowed"​ 
 +  } 
 + 
 +====== Двух-факторная аутентификация ====== 
 +//​Получение информации о включенных методов 2-х факторной аутентификации пользователя//​ 
 + 
 +Расположение:​ 
 +  POST /​Device/​Api/​V1/​Account/​EnabledTwoFactorMethods 
 +Тело запроса:
  
   {   {
-     "deviceId": "Уникальный идентификатор устройства", ​  +    ​"twoFactorSessionToken":"​временная сессия полученая в результате аутентификации"
-     "​deviceName":​ "​Наименование устройства, чтобы пользователь мог распознать его в личном ​кабинете"+
   }   }
-  ​ + 
-Ответ при успешной операции (код статуса 200):+Пример ответа:
  
   {   {
-     "​id":"​Код привязки" ​ +    "​requestId":"​идентификатор запроса сгенерированный на стороне сервера",​ 
 +    "​body":​ [ 
 +      
 +        ​"Method":"​метод 2-х факторной аутентификации ​принимающе одно из значений:​ Sms,​Telegram",​ 
 +        "​Enabled":"​флаг означающий ​включен этот метод или нет"​ 
 +      } 
 +    ], 
 +    "​succeeded":"​флаг ошибки (в случае если ошибка не имеет никакого отношения к бизнес-логике самого API, это может быть ошибка валидации или ошибка InternalServerError и так. далее)"
 +    "​errors"​ : [ 
 +      { 
 +        "​Code":​ "​код ошибки (не число)",​ 
 +        "​Message":​ "​описание ошибки"​ 
 +      } 
 +    ]
   }   }
  
-**Код привязки нужно сохранить в устройстве**+**//​Инциация запроса на отправку верификационного кода по методу Sms//**
  
-Ответ ​при ошибках имеет следующую структуру:+Расположение
 +POST /​Device/​Api/​V1/​Sms/​SendVerificationCode 
 +Тело запроса:
  
 +  {
 +    "​twoFactorSessionToken":"​временная сессия полученая в результате аутентификации"​
 +  }
 +
 +Пример ответа:​
  
   {   {
-    "​requestId":"​идентификатор ​сообщения", +    "​requestId":"​идентификатор ​запроса сгенерированный на стороне сервера", 
-    "​succeeded":"​false", +    "​succeeded":"​флаг ошибки", 
-    "​errors":​ [ +    "​errors"​ : [ 
-        +      
-           ​"code":"​код ошибки",​ +        "Code": "​код ошибки ​(не число)", 
-           ​"message":"​сообщение"​ +        "Message": "описание ​ошибки
-        }+      }
     ]     ]
   }   }
-  ​ + 
-==== Отправка отсканнированного значения qr-code на сервер ====+**//​Верификация через 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 браузер. ======
  
  
Строка 86: Строка 225:
  
   {   {
-    "​id":"​Код ​привязки",​+    "​id":"​persistentSessionToken ​полученый ​в результате аутентификации",
     "​code":"​Значение QR-код"​     "​code":"​Значение QR-код"​
   }   }
iis-device-2fa.txt · Последние изменения: 2020/09/16 12:21 — admin1