我可以使用 JWTAuthentication 两次进行登录身份验证吗?

Posted

技术标签:

【中文标题】我可以使用 JWTAuthentication 两次进行登录身份验证吗?【英文标题】:Can I use JWTAuthentication twice for a login authentication? 【发布时间】:2020-07-28 01:03:19 【问题描述】:

在我的登录中,首先我想发送 OTP,其次我想验证 OTP,然后返回令牌。

我正在使用rest_framework_simplejwt JWTAuthentication。首先是验证用户并发送 OTP,而不是返回令牌,其次是验证 OTP 并返回令牌。

让我知道这是否是正确的使用方法?如果不是,我该如何使用 JWTAuthentication 来实现。

或者如果这不是正确的使用方式,我是否可以像首先使用 Basic authentication 来验证用户,然后使用 jwt authentication 来验证 OTP 和发送令牌。让我知道你的解决方案。

【问题讨论】:

【参考方案1】:

我理解了什么?

在检查用户是否存在于您的系统中之后,您需要向正在点击您的 send_otp 路由的当前用户发送 OTP,然后 verify_otp 路由将验证用户在 API 中发送的 OTP 及其对应的mobile_number/email_id。

怎么做?

send_otp - 保持这条路线打开,你不需要为此进行身份验证,甚至不需要基本身份验证(这就是它在行业中的工作方式),只需从用户那里获取 mobile_number在请求中,检查它是否存在于数据库中,并将 OTP 发送到该号码,并将 OTP 设置为缓存中的相应用户,以便重新检查(redis/memcache)。对这条路由使用节流,这样任何人都无法利用你的这个 API。

verify_otp - 此路由也将打开(无 authentication_class/permission_classes),从用户那里获取 mobile_number/email id + OTP,在缓存中验证,如果验证通过,生成令牌使用TokenObtainPairSerializer,并在响应中发送刷新+访问令牌,如果OTP不正确,发送401。

【讨论】:

感谢@sajal-sharma,这真的很有用。 乐于助人:)

以上是关于我可以使用 JWTAuthentication 两次进行登录身份验证吗?的主要内容,如果未能解决你的问题,请参考以下文章

使用 System.IdentityModel.Tokens.Jwt 从 1.1 迁移到 2.0 后,JWTAuthentication 在 asp.net core 2.0 中不起作用 - 5.1.

JWT Authentication,Authorize 属性中定义的角色被忽略

JWT Authentication .Net core [Authorize] 属性被控制器忽略

如何使用 JWT Authentication 在 springboot 中使用 html 模板?

Angular 6 JWT 身份验证

Angular2 JWT 身份验证 - JWT 必须分为 3 个部分?