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

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


iis-device-2fa

Различия

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

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

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