【问题标题】:Why do we need refresh tokens in JWT为什么我们需要在 JWT 中刷新令牌
【发布时间】:2020-12-03 13:51:55
【问题描述】:

我刚刚在 nodejs 中学习 JWT,我发现了刷新令牌。

据我了解,用户获得访问令牌和刷新令牌。访问令牌过期后,会发出包含刷新令牌的请求以获取新的访问令牌。为了获取新的访问令牌,服务器检查接收到的刷新令牌是否包含在数据库中。如果刷新令牌被盗,可以很容易地从数据库中删除并防止进一步刷新。

我的问题是:为什么我们不让访问令牌表现得像刷新令牌一样?即我们将它们存储在数据库中,并在发出请求时检查它们是否存在,当受到攻击时我们只是删除它们?

【问题讨论】:

    标签: authentication jwt authorization


    【解决方案1】:

    回答您的问题的关键要素是:您需要在交付给客户的访问令牌上添加到期日期。这是刷新令牌的主要目的。

    想象一下,有人盗用了您的 access_token,而您却没有让它过期:这意味着只要您没有发现您的 access_token 被盗,您实际上就是在向拥有它的人提供终身免费通行证。

    有了刷新令牌和可过期的access_tokens,你就知道漏洞的窗口真的很小。

    现在你的第二个问题:为什么我们不让 access_tokens 表现得像 refresh_tokens ?

    这里的关键思想是将您的 refresh_token 保存在安全的地方,并且只公开 access_tokens。

    顺便说一下,refresh_tokens 有一个工作:携带信息以生成新的 access_tokens,而 access_tokens 有自己的工作:携带必要的信息,让您可以直接访问资源。

    如果您关注大多数严肃的网站,它们都有一个集中的身份验证服务器来提供 access_tokens。

    【讨论】:

    • 我理解让访问令牌过期的想法。但我仍然不明白,刷新令牌如何比访问令牌更安全地保存?它们都被发送到客户端,唯一的区别是每个请求都会发送访问令牌,并且每 15 分钟左右发送一次刷新令牌。提前致谢!
    猜你喜欢
    • 1970-01-01
    • 2017-01-18
    • 2016-09-24
    • 1970-01-01
    • 2021-12-02
    • 2019-12-28
    • 2021-06-18
    • 2020-05-20
    相关资源
    最近更新 更多