最佳答案
JWT 规格提到了一个据称可以用来防止重播攻击的 jti 声明:
“ jti”(JWT ID)声明为 JWT 提供了一个唯一标识符。标识符值的分配方式必须确保同一值意外分配给不同数据对象的概率可以忽略不计; 如果应用程序使用多个发行者,不同发行者产生的值之间也必须避免冲突。可以使用“ jti”声明来防止重播 JWT。“ jti”值是区分大小写的字符串。使用此索赔是可选的。
我的问题是,我该如何实现这一点?我是否需要存储以前使用的 jtis 并在每个请求中发出一个新的 JWT?如果是这样,这是否违背了 JWT 的宗旨?为什么使用 JWT 而不是仅仅在数据库中存储随机生成的会话 ID?
我的 REST API 有一个 Mongo 数据库,我不反对添加一个 Redis 实例。还有比 JWT 更好的身份验证选项吗?我主要只是不想在客户端存储密码,因为这样可以避免 HTTP 身份验证,但是,随着我越来越深入地研究 JWT,我开始觉得自定义令牌实现或不同的标准可能更适合我的需要。对于基于令牌的身份验证,是否有支持令牌撤销和旋转令牌的节点/快速包?
希望你能给点建议。