Идентификация Asp.Net с 2FA: список доверенных браузеров

Я работаю над проектом с Asp.Net MVC 5 и Asp.Net Identity, и я использую двухфакторную аутентификацию. Для входа я использую:

var result = await SignInManager.TwoFactorSignInAsync(model.Provider, model.Code, isPersistent: model.RememberMe, rememberBrowser: model.RememberBrowser);

который является кодом по умолчанию, который поставляется с новым проектом. Тем не менее, мне также нужна способность "доверять" или "помнить" браузер, подобно тому, как банки могут указать, был ли это первый раз, когда вы вошли в систему с определенного браузера/ПК.

Мой вопрос касается свойства RememberBrowser метода sign и того, что делает .NET Identity с этими данными. Я хочу список сохраненных браузеров и возможность отменить доступ к одному/и/или всем из них. Возможно ли это в рамках Identity? Кроме того, могу ли я определить, был ли браузер "доверен" ранее каким-то типом поиска?

Edit:

Может быть, неплохо сохранить информацию о браузере в базе данных и проверить логин вместо cookie? Таким образом, он может быть показан как список с возможностью его удаления. Я ищу, что сохранить и как интегрировать его с идентификатором Asp.Net без риска для безопасности.

Изменить 2

Вот пример с веб-сайта, который уже использует это: Список браузеров

Изменить 3

Возможно, это может быть реализовано как еще один шаг для аутентификации. Таким образом, в основном у нас будет аутентификация с тремя факторами:

  • Первый пользователь регистрируется с пользователем /pass
  • Затем мы проверим, включен ли 2FA и при необходимости получите код.
  • Мы получаем агент пользователя и IP-адрес и проверяем базу данных, если она новая. Затем при необходимости сообщите.

Итак, я предполагаю, что новый файл cookie должен быть добавлен для сохранения информации обозревателя. Однако мы должны иметь возможность аннулировать этот файл cookie вместе с файлом cookie 2FA.

Ответ 1

Не уверен, что сохранение информации обозревателя добавит значение в качестве информации о браузере, будет одинаковой для разных пользователей (с использованием того же браузера и версии), если вы не сохраните IP-адрес запроса; и сохранение запроса IP-запроса слишком много осложнений.

Как добавить пользовательскую претензию к токену, если пользователь установил RememberBrowser, а затем выполните свою логику на основе этого пользовательского требования? Например, установите пользовательское требование your_claim_name и установите для него Guid.NewGuid(), если RememberBrowser - true. Также сохраните имя пользователя, этот указатель и флаг состояния в базе данных. Когда приходит запрос, проверьте, присутствует ли ваше пользовательское требование, если да, попросите таблицу со значением пользовательской заявки и именем пользователя, чтобы проверить, активна ли запись.

Вы можете либо удалить запись или мягкое удаление (установить статус) запись для пользователя, чтобы при следующем запросе вы могли выполнить требуемую логику.

Ответ 2

RememberBrowser устанавливает cookie, который позволяет пропустить шаг 2FA. Центрального способа отслеживания этого нет, хотя было бы достаточно легко зарегистрировать, однако результаты могут быть неточными, потому что люди могут удалять файлы cookie вручную. Нет никакого способа сделать это недействительным. Я полагаю, но это не имеет особого значения, поскольку вы можете аннулировать их сеанс, и пользователю потребуется снова войти в систему со своим паролем.