【问题标题】:Is this JWT based authentication method safe?这种基于 JWT 的身份验证方法安全吗?
【发布时间】:2016-03-24 04:07:21
【问题描述】:

尝试使用 JWT 为 API 实施安全身份验证方法,该 API 将被许多客户端使用,包括 Web(单页应用程序)、桌面、移动设备我想出了这个系统:

  1. 客户端调用 /auth/login 并设置用户名和密码
  2. 在验证服务器返回两个令牌后,一个 auth_token 和一个 refresh_token
    • 身份验证令牌的生命周期很短,只有 15 分钟,用于后续的每个 API 调用
    • 刷新令牌的寿命可能长达 12 小时到一周,但使用格式为 user_pass + long_string 的密钥签名
  3. 令牌过期后,调用 /auth/renew
    • 发送身份验证令牌以检查其过期时间(不超过一小时)
    • 刷新令牌也被发送并使用用户密码进行验证
    • 如果刷新令牌未过期且授权令牌长时间未过期,则会发回新的授权令牌
    • 如果用户密码已更改,则刷新令牌无效,用户需要在其现有的短期身份验证令牌过期后重新进行身份验证

虽然身份验证令牌有一个小窗口过期但仍然有效,并且对数据库进行了调用;这是使用 JWT 进行身份验证以及处理密码更改和令牌刷新的整体安全方式吗?

【问题讨论】:

    标签: authentication authorization token jwt


    【解决方案1】:

    不要尝试实现您自己的身份验证基础架构。您获得安全实现的机会很小,现在您还必须维护所有代码。

    最好使用信誉良好的授权服务器,例如Thinktecture IdentityServer 或Azure Active Directory,并使用标准库和协议。

    我看到你的提议存在一些问题:

    1. 如果你不签署访问令牌,是什么阻止我改变 里面的索赔?
    2. 如果您需要用户密码来验证刷新令牌,您必须以可以明文检索它的方式存储它。密码只能存储为加盐哈希,以防止您访问明文。

    【讨论】:

    • 访问令牌将使用单独的访问密钥进行签名,但我在数字 2 中看到了您的观点。我完全忘记了密码将如何存储(使用 bcrypt)。谢谢你的回答。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-21
    • 2016-03-26
    • 2016-04-03
    • 2017-01-03
    • 1970-01-01
    • 2016-10-14
    • 2011-06-17
    相关资源
    最近更新 更多