为什么不能撤销JWT刷新令牌?

时间:2017-09-10 14:01:37

标签: security session jwt

我目前正试图围绕JSON Web令牌,并确保我不会在脚下拍摄自己(和我的用户)。因此,我发现了帖子Stop using JWT for sessions,更具体地说,the rebuttals to counterpoints

其中一个对立点是,无法使令牌无效可以通过设置较短的到期时间来对抗,并使用刷新令牌来允许用户获取新令牌而无需再次登录。对此的反驳就是"你不能撤销长期代币,这意味着你要回到原点。"

你怎么能撤销长期代币?是不是需要将它们传递给认证服务器,认证服务器可以检查无效令牌列表(或者只是从其数据库中删除了刷新令牌),然后提供新的JWT?

1 个答案:

答案 0 :(得分:1)

可以完全撤消刷新令牌。身份验证服务器向每个客户端发出长期刷新令牌,并且必须跟踪它以验证刷新请求。

刷新令牌不必是独立的JWT,因此必须存储在服务器上。服务器将刷新令牌与客户端帐户相关联,只需将其删除,以便下一个刷新请求需要新的最终用户身份验证。

这是一个示例身份验证响应,其中包含OpenIdConnect的刷新令牌(Oauth2扩展名)

HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-store
Pragma: no-cache

{
 "access_token": "SlAV32hkKG",
 "token_type": "Bearer",
 "refresh_token": "8xLOxBtZp8",
 "expires_in": 3600,
 "id_token": "eyJhbGciOiJSUzI1NiIg..."
}