在我的项目中,当用户更改密码时,要求使用户的所有jwt令牌无效。我想给每个用户一个不同的签名密钥,只需在密码更改时重置密钥。然后我用Google搜索,发现Redis是存储每个用户密钥的好地方。一切似乎都很好。
但有一件事我无法理解。由于每次请求必须按Redis一次,因此与向用户发出不透明令牌而不是JWT有任何不同,并存储令牌 - > Redis中的JWT有效负载映射?是否会破坏使用JWT的目的?
答案 0 :(得分:1)
要使令牌无效,您需要撤消它们。每次需要验证JWT时,OAuth规范也不需要从远程服务器获取密钥(正如您所说的那样,它会破坏目的)。密钥可以存储在资源站点的本地。 你有两个选择:
1)每次验证时,都会针对OAuth服务器从资源端反馈JWT令牌。对我而言似乎有点矫枉过正。最好的方法是给JWT令牌提供短暂的到期时间,让已经发行的令牌到期。
2)让资源在本地存储密钥,当它无法验证时,获取密钥并重新验证它。
答案 1 :(得分:0)
从使令牌无效的角度来看,没有特别需要将JWT存储在Redis中 - 您可以检查的任何内容以及稍后无效的内容应该可以解决问题。
那就是说,大概是因为其他原因你正在使用JWT。例如,它是AuthN / Identity服务提供的内容。或者您可能使用它来存储您作为AuthN / AuthZ逻辑的一部分验证的声明或其他元数据。在这种情况下,由于它很方便,存储JWT似乎非常合理。