具有2FA的Asp.Net标识:受信任的浏览器列表

Ali*_*ori 13 c# asp.net asp.net-mvc asp.net-identity

我正在开发一个使用Asp.Net MVC 5和Asp.Net Identity的项目,我正在使用双因素身份验证.对于我使用的登录:

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

这是新项目附带的默认代码.但是,我还需要用户"信任"或"记住"浏览器的能力,类似于银行如何指示这是否是您第一次从特定浏览器/ PC登录.

我的问题是RememberBrowser关于登录方法的属性以及.NET Identity对此数据的处理方式.我想要保存的浏览器列表以及撤销对其中一个/全部或所有浏览器的访问权限的能力.这在Identity框架内是否可行?另外,我可以通过某种类型的查找来判断浏览器是否已被"信任"吗?

编辑:

也许将浏览器信息保存在数据库中并检查登录而不是cookie是个好主意?这样它就可以显示为能够删除它的列表.我正在寻找的是如何保存以及如何将其与Asp.Net标识集成而不存在安全风险.

编辑2

以下是已经使用此网站的示例: 浏览器列表

编辑3

也许这可以作为身份验证的另一个步骤来实现.所以基本上我们将有一个3因素身份验证:

  • 第一个用户使用user/pass登录
  • 然后我们将检查2FA是否已启用并在必要时获取代码
  • 我们获取用户的aser代理和IP,并检查数据库是否是新的.然后在必要时通知.

所以我猜测应该添加一个新的cookie来保存浏览器的信息.但是,我们应该能够使此cookie与2FA cookie一起失效.

Dev*_*per 3

不确定保存浏览器信息是否会增加价值,因为浏览器信息对于不同用户(使用相同的浏览器和版本)来说是相同的,除非您也保存请求者 IP;并且保存请求者IP有太多的复杂性。

如果用户已设置,则向令牌添加自定义声明,RememberBrowser然后根据此自定义声明执行逻辑怎么样?例如,设置自定义声明并为其your_claim_name设置 a (如果为 true)。还将用户名、该 guid 和状态标志保存在数据库中。当请求到来时,检查您的自定义声明是否存在,如果存在,则使用自定义声明值和用户名查询表以检查该条目是否仍然有效。Guid.NewGuid()RememberBrowser

您可以删除该条目或软删除(设置状态)用户的条目,以便在下一个请求到来时您可以执行所需的逻辑。

  • 当然你应该能够做到这一点,但是添加另一个 cookie 如何解决这个问题呢?我仍然认为您必须将这些详细信息保留在数据库/任何存储中,以便您可以向用户显示列表,并检查和发送电子邮件,以防他从不同的浏览器登录。 (2认同)