Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net Net核心中的双因素身份验证-如何验证令牌_.net_Oauth 2.0_Jwt_.net Core 3.1_Two Factor Authentication - Fatal编程技术网

.net Net核心中的双因素身份验证-如何验证令牌

.net Net核心中的双因素身份验证-如何验证令牌,.net,oauth-2.0,jwt,.net-core-3.1,two-factor-authentication,.net,Oauth 2.0,Jwt,.net Core 3.1,Two Factor Authentication,我正在为SPA客户端在.NETCore3.1中实现双因素身份验证。我已经设置了Jwt身份验证,所以应该在成功的2fa验证后发布承载令牌。我不确定密码身份验证是否适合2fa。如果密码有效且未启用2fa,则.Net Core API可以简单地返回JWT承载令牌,如果启用2fa,我的想法是(我没有使用标识,因此UserManager类不是选项): 密码验证成功后,返回过期的JWT令牌(临时令牌) 用户被重新路由到2FA屏幕,输入2FA代码,然后与临时令牌一起提交给API 在服务器中,使用JwtSecu

我正在为SPA客户端在.NETCore3.1中实现双因素身份验证。我已经设置了Jwt身份验证,所以应该在成功的2fa验证后发布承载令牌。我不确定密码身份验证是否适合2fa。如果密码有效且未启用2fa,则.Net Core API可以简单地返回JWT承载令牌,如果启用2fa,我的想法是(我没有使用标识,因此UserManager类不是选项):

  • 密码验证成功后,返回过期的JWT令牌(临时令牌)
  • 用户被重新路由到2FA屏幕,输入2FA代码,然后与临时令牌一起提交给API
  • 在服务器中,使用JwtSecurityTokenHandler.ValidateToken传递设置为ValidateLifetime=false的TokenValidationParameters来验证临时令牌
  • 验证2fa代码和临时令牌后,返回最终的JWT令牌,作为后续API调用中的授权头

  • 步骤1对我来说似乎有点冒险,因为临时令牌没有过期时间-如果攻击者有权访问该令牌,那么他可以强制系统,因为2FA代码只有6位。另一方面,发行寿命较短(比如2分钟)的令牌似乎也有风险,因为该令牌现在可以在其他端点中实际使用。对于2FA流,一般的指导原则是什么?

    我想到了创建一个一次性使用令牌,它的使用寿命很短。一次性令牌使用用户的哈希密码和上次登录日期作为签名密钥。这使得它成为一次性的,就像用户在上次登录日期更改时一样。

    我的另一个想法是,为了2FA代码的唯一目的,有一个单独的令牌颁发者,具有不同的签名密钥。这一次,我可以发布一个生命周期更短的令牌,但仍然不能在其他端点上使用。这似乎是个好主意,但仍在寻找其他选择。