我是JWT的新手,并且想知道当用户退出应用程序时是否有可能使服务器端的JWT无效(我还想知道它是否甚至有道理这样做!)。想法是:
POST https://api.myapp.example.com/auth/invalidate
我不确定这是否是一种非正统的退出逻辑方法,或者即使在用户退出之后让JWT仍然有效,是否可以接受(我想我可以缩短其寿命) JWT到期,比方说,60分钟或其他)。
再次:想知道是否有可能做到这种" 失效"使用(如果是这样,如何?!)以及它是否有意义(如果没有,典型的注销流程是什么样的?!)。谢谢!
答案 0 :(得分:3)
除了令牌到期日期(在exp
声明中说明),我可以想到使 JWT令牌失效的几种方式:
第一种方法需要更改用于在服务器端对令牌进行签名的密钥,但对于您的问题中描述的情况,它似乎并不实用。
另一种方法(可能是最适合您的方法)涉及将令牌的跟踪保留在服务器端的白名单中。
发布令牌时,请使用jti
声明在令牌中存储唯一标识符。同时将此唯一标识符添加到服务器端的白名单中。
验证令牌时(除了检查签名,到期日期和您可能需要的其他声明之外),请确保将jti
声明的值列入白名单。
当用户请求使令牌无效时,请从白名单中删除令牌标识符。
对于令牌标识符,您可以使用UUID s。
JWT允许您执行无状态身份验证(一旦验证签名,您就可以信任该令牌,然后执行身份验证,而不依赖于外部实体)。白名单方法是一种权衡,如果您需要跟踪您发布的令牌。