我正在建立一个我想要安全的认证系统。我计划使用JWT令牌作为主要的身份验证机制。当令牌过期时,服务器将返回"401未经授权“响应,我希望客户端能够执行无声刷新。这通常是使用刷新令牌完成的。我想知道使用用户密码哈希作为刷新令牌会带来什么安全影响?
除此之外,我还计划在JWT中包含密码哈希。当验证JWT时,我的应用程序将检查JWT中的密码哈希是否与用户当前的密码哈希匹配。如果它们不同,服务器将告诉客户端将用户注销。
在这个过程中是否有我遗漏的安全漏洞?
发布于 2020-04-15 19:36:51
您已经将短暂的访问令牌转换为刷新令牌,因为您将刷新令牌存储在访问令牌中。这与使用访问令牌的目的大相径庭。
向客户端发送密码散列通常也是不明智的,因为这些东西往往会通过错误或过度狂热的日志被泄露,这使得可以在脱机时强行使用密码(尽管您已经可以访问客户端,所以.)。这也意味着,如果不强制更改密码,就不能撤消刷新。这可能很好,但对用户来说也可能很烦人。刷新也应该过期。
一般来说,你永远不应该将秘密用于那些非目的的事情。您应该为刷新令牌使用专用值,无论是指向数据库中某个值的指针,还是由秘密密钥加过期签名的令牌本身。而且不应该将刷新令牌存储在访问令牌中。
所有这些都符合通常的建议:不要自己滚。找一个已经为你这样做的图书馆或服务。有很多是免费或便宜的,而且很多人都有很好的安全记录。
https://security.stackexchange.com/questions/229870
复制相似问题