JWT spec条提到了jti的一项声明,据称该声明可以用作防止重播攻击的临时措施:
"jti"(JWT ID)声明为JWT提供了唯一标识符.标识符值的分配方式必须确保相同值意外分配给不同数据对象的概率可以忽略不计;如果应用程序使用多个发行者,则必须防止不同发行者生成的值之间发生冲突."jti"声明可用于防止JWT重播."jti"值是区分大小写的字符串.此声明的使用是可选的.
我的问题是,我将如何实施这一点?我是否需要存储以前使用的JTI,并在每次请求时发布新的JWT?如果是这样,这不是违背了JWTs的目的吗?为什么要使用JWT,而不是将随机生成的会话ID存储在数据库中?
我的REST API有一个Mongo数据库,我不反对添加Redis实例.有比JWT更好的身份验证选项吗?我主要不想在客户机上存储密码,这会消除HTTP身份验证的选项,然而,随着我对JWT的深入了解,我开始觉得定制令牌实现或不同的标准可能更适合我的需要.是否有支持令牌撤销和循环令牌的基于令牌的身份验证的node/express包?
如果您有任何建议,我将不胜感激.