【问题标题】:Design of JWT authentication?JWT认证的设计?
【发布时间】:2019-09-16 21:30:16
【问题描述】:

我正在使用位于https://github.com/davesque/django-rest-framework-simplejwt 的 DjangoRest 框架 simple-jwt 包。

这提供了两个 api 端点来获取访问令牌和刷新令牌。目前我将访问令牌存储在浏览器的 localStorage 中。这是存储它的最佳位置,还是 sessionStorage 更好?

当我因为当前访问令牌过期而需要新的访问令牌时,我是否应该在 POST 请求中传递刷新令牌(存储在 localStorage 中)?这是最好的实现吗?将这个关键的刷新令牌字符串存储在浏览器中似乎不安全。

【问题讨论】:

    标签: django authentication django-rest-framework jwt django-rest-framework-simplejwt


    【解决方案1】:

    这行得通,是的,您将传递刷新令牌。由于您将它用于网络应用程序,我建议您让访问令牌和刷新令牌很快过期,这样它总是会生成一个新令牌。

    【讨论】:

    • 我知道这行得通。我特别问这是否是一个好的设计,因为如果您的刷新令牌被泄露,那么对手将可以长时间访问您的数据。使刷新令牌快速过期违背了我认为的目的,目的是通过不必频繁重新登录来获得更好的用户体验。那么使用浏览器存储安全吗?或者我应该尝试将此令牌存储在某种会话实例的后端。您也没有评论会话或本地存储是否是更好的选择。
    • 无论您将刷新令牌存储在何处,都存在被泄露的风险,这就是现实。 JWT 令牌并不意味着存储在后端或数据库中。我将我的存储在客户端(本地存储)中,它工作得很好。我还认为,如果用户处于非活动状态并且刷新令牌已过期,您应该在某些时候退出该用户。它是网络,而不是应用程序,通常计算机是共享的。这完全取决于您正在构建的应用程序类型,并且有几种方法可以不退出用户并生成新令牌。
    • 谢谢,这很有帮助。您能否列出一些我可以查看的不退出用户的方法?
    • 1.您可以将用户的电子邮件和密码与令牌一起存储,并在用户再次激活时请求带有凭据的新令牌。 2.永不过期刷新令牌并记录哪个设备用户在使用。然后检查用户是否从其他设备登录并提醒用户。然后用户可以说是我或注销用户并更改密码。
    猜你喜欢
    • 2017-06-17
    • 1970-01-01
    • 2021-03-05
    • 2021-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-24
    • 2014-10-13
    相关资源
    最近更新 更多