注销时无效的JWT?

时间:2018-01-08 10:57:29

标签: security authentication jwt

我是JWT的新手,并且想知道当用户退出应用程序时是否有可能使服务器端的JWT无效(我还想知道它是否甚至有道理这样做!)。想法是:

  1. 用户点击其应用中的退出链接
  2. App拨打POST https://api.myapp.example.com/auth/invalidate
  3. JWT(HTTP请求标头中的授权/承载令牌)以某种方式无效
  4. 现在,没有人可以再次使用那个JWT
  5. 我不确定这是否是一种非正统的退出逻辑方法,或者即使在用户退出之后让JWT仍然有效,是否可以接受(我想我可以缩短其寿命) JWT到期,比方说,60分钟或其他)。

    再次:想知道是否有可能做到这种" 失效"使用(如果是这样,如何?!)以及它是否有意义(如果没有,典型的注销流程是什么样的?!)。谢谢!

1 个答案:

答案 0 :(得分:3)

除了令牌到期日期(在exp声明中说明),我可以想到使 JWT令牌失效的几种方式:

更改密钥

第一种方法需要更改用于在服务器端对令牌进行签名的密钥,但对于您的问题中描述的情况,它似乎并不实用。

将令牌标识符

列入白名单

另一种方法(可能是最适合您的方法)涉及将令牌的跟踪保留在服务器端的白名单中。

  • 发布令牌时,请使用jti声明在令牌中存储唯一标识符。同时将此唯一标识符添加到服务器端的白名单中。

  • 验证令牌时(除了检查签名,到期日期和您可能需要的其他声明之外),请确保将jti声明的值列入白名单。

  • 当用户请求使令牌无效时,请从白名单中删除令牌标识符。

对于令牌标识符,您可以使用UUID s。

JWT允许您执行无状态身份验证(一旦验证签名,您就可以信任该令牌,然后执行身份验证,而不依赖于外部实体)。白名单方法是一种权衡,如果您需要跟踪您发布的令牌。