带有OAuth2的ASP.NET Web API - "记住这个浏览器"使用双因素身份验证时

时间:2017-02-02 13:21:40

标签: c# .net asp.net-mvc asp.net-web-api asp.net-identity

在ASP.NET MVC 5的默认模板中,可以选择"记住此浏览器"使用双因素身份验证登录时。

在ASP.NET MVC中,这涉及在app.UseTwoFactorRememberBrowserCookie();中配置Startup.Auth.cs,然后在SignInManager.TwoFactorSignInAsync()

中使用isPersistent: true

我想完成同样的工作,但使用ASP.NET Web API和OAuth2 Bearer Tokens。

即。我希望用户能够注销(或自动注销)。但下次使用同一浏览器登录时,用户只需提供密码,而不是双因素身份验证。

如何使用OAuth2 Bearer Tokens实现此类行为?

4 个答案:

答案 0 :(得分:3)

嗯,在我看来,这是客户方面的问题,我想将您的问题改为"在客户端存储身份验证令牌的最佳位置是什么?&#34 ;

您有几个选择:

  1. HTML5网络存储(localStorage或sessionStorage)
  2. 缓存
  3. 使用选项一,当标签/浏览器关闭时,令牌仍处于活动状态,下次您自动登录。

    $window.sessionStorage.setItem('userInfo-token', 'tokenData');
    

    使用选项2,您可以将令牌保存到cookie中,并在您要向服务器发送请求时检索它。

    当然两种选择都有利有弊,更多信息我建议您阅读Where to Store your JWTs – Cookies vs HTML5 Web Storage

答案 1 :(得分:1)

我建议您需要更好地控制身份验证解决方案并使用不同的登录实现实现自己的LoginController,并在成功的ASP.NET Web API OAuth2 Bearer Tokens登录后创建“记住此浏览器”cookie存在于用户浏览器上。就像ASP.NET MVC app.UseTwoFactorRememberBrowserCookie()那样。

如果用户使用两个因子登录,然后注销,则在该浏览器上放置一个cookie,“记住我30天”cookie,下次登录时,检查未过期的cookie并仅允许使用密码登录到OAuth2 Bearer Tokens以外的其他登录方法。

您可以控制并且不需要ASP.NET Web API OAuth2 Bearer Tokens来解决整个登录解决方案。

答案 2 :(得分:0)

我很确定这可以控制您用于验证用户身份的身份提供程序。例如如果您使用任何微软服务,第一次登录浏览器时会要求进行双因素身份验证,然后“记住”浏览器/设备以进行任何后续登录,并且不会启用双因素身份验证。 OAuth2只是一个授权过程而不是身份验证过程,因此您不太可能指示身份提供者不启动双因素身份验证。

答案 3 :(得分:0)

您可以采取以下措施来实现此行为。

1)在登录按钮期间,单击发送ajax post请求到http:// {yoursite} / token。成功登录后,它将使用不记名令牌和一些身份信息进行回复。检查" twofactorrequired"在本地存储中标记并确定是否需要双因素身份验证。如果此标志不可用,则将标志(首次登录)设置为true。如果此标志值为false,则表示完成了双因素身份验证。应根据发送给用户的电子邮件链接或电话代码设置此标记。

for (int i=0; i<60; i++)

注意:此方法不完全安全。可以使用开发人员工具轻松设置此标志(F12)。为了使这更安全,需要在db中保留此标志以及MAC地址或类似内容。