我正在开发一个使用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 Identity集成,而不会有安全风险。
也许这可以作为身份验证的另一个步骤来实现。所以基本上我们将进行3因素身份验证:
所以我猜测应该添加一个新的cookie以保存浏览器的信息。但是,我们应该能够使此cookie与2FA cookie一起失效。
答案 0 :(得分:4)
RememberBrowser设置一个cookie,允许跳过2FA步骤。没有集中的方法来跟踪这个,虽然它很容易记录,但结果可能不准确,因为人们可以手动删除cookie。我认为没有办法使它无效,但这并不重要,因为你可以使他们的会话无效,并且用户将被要求再次使用他们的密码登录。
答案 1 :(得分:3)
不确定保存浏览器信息是否会增加价值,因为浏览器信息对于不同的用户(使用相同的浏览器和版本)将是相同的,除非您同时保存请求者IP;和保存请求者IP有太多的复杂性。
如果用户已设置RememberBrowser
,然后根据此自定义声明执行逻辑,那么如何向令牌添加自定义声明?例如,如果your_claim_name
为真,则设置自定义声明Guid.NewGuid()
并为其设置RememberBrowser
。还要在数据库中保存用户名,此guid和status标志。当请求到来时,检查您的自定义声明是否存在,如果是,则使用自定义声明值和用户名查询该表以检查该条目是否仍处于活动状态。
您可以删除条目或软删除(设置状态)用户的条目,以便在下一个请求到来时您可以执行所需的逻辑。