【问题标题】:Two Factor Authentication in .Net Core - How To Validate Token.Net Core 中的两因素身份验证 - 如何验证令牌
【发布时间】:2021-01-13 05:48:56
【问题描述】:

我在 .Net Core 3.1 中为 SPA 客户端实现双因素身份验证。我已经设置了 Jwt 身份验证,因此应该在成功 2fa 验证后发布不记名令牌。我不确定密码身份验证如何与 2fa 匹配。如果密码有效且 2fa 未启用,则 .Net Core API 可以简单地返回 JWT Bearer 令牌,如果启用 2fa 是我的想法(我没有使用 Identity,所以 UserManager 类不是一个选项):

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

第 1 步对我来说似乎有点冒险,因为临时令牌没有过期 - 如果攻击者可以访问此令牌,那么他可以暴力破解系统,因为 2FA 代码只有 6 位数字。另一方面,发行一个生命周期较短的令牌,比如 2 分钟,似乎也有风险,因为该令牌现在可以实际用于其他端点。 2FA 流程的一般准则是什么?

【问题讨论】:

  • 我的另一个想法是有一个单独的令牌发行者,具有不同的签名密钥,仅用于 2FA 代码。这次我可以发出一个寿命较短的令牌,但仍然不能在其他端点上使用。似乎是个好主意,但仍在寻找其他选择。

标签: .net oauth-2.0 jwt .net-core-3.1 two-factor-authentication


【解决方案1】:

我想出了一个一次性使用令牌,它的寿命很短。一次性令牌使用用户的散列密码和上次登录日期作为签名密钥。这使得它成为一次性的,因为用户登录的最后一次登录日期发生了变化。

【讨论】:

    猜你喜欢
    • 2020-02-05
    • 2018-08-03
    • 2019-04-16
    • 2018-07-30
    • 2019-07-21
    • 1970-01-01
    • 2013-06-06
    • 2021-12-17
    • 1970-01-01
    相关资源
    最近更新 更多