我目前正试图围绕JSON Web令牌,并确保我不会在脚下拍摄自己(和我的用户)。因此,我发现了帖子Stop using JWT for sessions,更具体地说,the rebuttals to counterpoints。
其中一个对立点是,无法使令牌无效可以通过设置较短的到期时间来对抗,并使用刷新令牌来允许用户获取新令牌而无需再次登录。对此的反驳就是"你不能撤销长期代币,这意味着你要回到原点。"
你怎么能撤销长期代币?是不是需要将它们传递给认证服务器,认证服务器可以检查无效令牌列表(或者只是从其数据库中删除了刷新令牌),然后不提供新的JWT?
答案 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..."
}