这种基于JWT的身份验证方法是否安全?

时间:2015-12-17 15:54:33

标签: authentication authorization token jwt

尝试使用JWT实现一种安全的身份验证方法,该方法将用于许多客户端,包括Web(单页面应用程序),桌面,移动设备,我已经提出了这个系统:

  1. 客户端调用/ auth / login,用户名和密码设置
  2. 验证服务器返回两个令牌后,即auth_token和refresh_token
    • Auth令牌短暂存在15分钟,用于以下每个API调用
    • 刷新令牌是长寿的可能是12小时到一周但是用一个密钥签名,格式为user_pass + long_string
  3. 令牌过期后,将调用被叫/ auth / renew
    • 发送身份验证令牌以检查其过期时间(不超过一小时)
    • 也会发送刷新令牌,并使用用户密码验证
    • 如果刷新令牌未过期且身份验证令牌已过期很长时间,则会发回新的身份验证令牌
    • 如果用户的密码已更改,则刷新令牌无效,并且用户需要在其现有的短期身份验证令牌过期后重新进行身份验证
  4. 虽然有一个小窗口让auth令牌过期但仍然有效,并且调用了数据库;这是使用JWT进行身份验证以及处理密码更改和令牌刷新的整体安全方式吗?

1 个答案:

答案 0 :(得分:2)

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

最好使用来自信誉良好的来源的授权服务器,例如Thinktecture IdentityServerAzure Active Directory,并使用标准库和协议。

我在您的提案中看到的一些问题:

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