JWT,使用存储在 DB 中的动态密钥
Posted
技术标签:
【中文标题】JWT,使用存储在 DB 中的动态密钥【英文标题】:JWT, Using a dynamic secret key stored in DB 【发布时间】:2018-09-14 22:45:03 【问题描述】:如果我继续采用以下方法,我需要一些关于未来陷阱和问题的建议。
我正在使用 JWT,当他/她更改密码时,我需要使用户之前的所有令牌过期。
我为每个用户制作唯一密钥的方法是连接我的密钥和用户密码 (config.jwtSecretKey + user.password
) 以生成动态密钥。
一旦用户更改了他/她的密码,密钥就会改变,因此之前的所有令牌都将无效。
一切正常,但要验证每个令牌,我需要调用数据库来获取密码。
请建议我可以如何改进这一点或做同样事情的正确方法。
【问题讨论】:
您是否以纯文本格式保存密码? 不,我正在使用 bcrypt 加密密码。 【参考方案1】:你的方法对KISSy来说非常好
可以通过使用一些动态密钥的内存缓存来减少数据库查询。
此外,您可以将动态密钥从 password hash
更改为 some random hash
以减少冲突。它将减少很多安全威胁。
【讨论】:
使用动态密钥的好处是,使用该哈希算法,您可以非常快速地提供单点登录,甚至可以在全球范围内提供,但如果您的算法被泄露(例如公司成员),您被搞砸了,或者如果它只是基于来自客户的密码或数据,那么他一方的违规行为也可能很危险。恕我直言,两者的混合可以提供非常好的身份验证:您只需请求可以缓存的数据库的少数字段,结合快速/不可预测的哈希算法,您可以提供非常快速有效的授权机制。以上是关于JWT,使用存储在 DB 中的动态密钥的主要内容,如果未能解决你的问题,请参考以下文章