У меня есть проект asp.net webapi (net framework) с базовой аутентификацией (на основе идентификатора aps.net), который выполняется с использованием фильтров, как описано здесь: https://docs.microsoft.com/en-us/aspnet/web-api/overview/security/authentication-filters,, так что доступ к методам APIконтролируется фильтрами IdentityBasicAuthentication и Authorize.
Я бы хотел реализовать двухфакторную аутентификацию.
Вот что я собираюсь сделать:
- Интерфейс отправляет «базовую аутентификацию» взаголовок, если пара имя пользователя / пароль верна, и у пользователя включен 2fa, тогда я отправляю ответный вызов: '2fa-token', включая временный 2fa-токен, в противном случае просто отправляю ответ обратно без вызовов с 200.
- ВнутреннеЯ отправляю пользователю смс / мейл код подтверждения.
- Если пользовательский интерфейс получает вызов 2fa-token, пользователь видит всплывающее окно с вводом кода.
- Клиент должен выполнить метод API, например TwoFactorCodeCheck (строка 2faCode, строка 2faToken UserCredentials uc)
- Если все верно, я отправляю обратно постоянный токен 2fa, который может быть сохранен в файлах cookie и будет использоватьсяв каждом последующем запросе webapi. В противном случае я отправляю запрос «WWW-Authenticate», и пользователю нужно будет снова пройти процесс.
- Добавить фильтр, который сможет считывать токен 2fa перманента из заголовка и аутентифицировать пользователя для выполнения методов webapi. Если запрос выполнен с использованием 2f постоянного токена, но срок его действия уже истек, я отправляю снова «WWW-Authenticate» и 401.
Звучит хорошо?
Каков наилучший способ хранения и управления кодами, которые отправляются на смс / электронную почту пользователя. Или, может быть, токен должен содержать информацию об истечении срока действия или / и некоторые другие метаданные, и нет необходимости хранить что-либо.
Кроме того, нужно ли мне как-то оперировать информацией, которая идентифицирует конкретный сеанс браузера / пользователя, так чтотокен нельзя использовать с другой машины / браузера.
Почему-то я не могу найти ни одного примера, где бы люди смешивали простой базовый auth + 2fa.
Спасибо.