我已经实现了访问令牌和刷新令牌,没有身份验证服务器(我的 API 服务器也进行身份验证)。
- 访问令牌:存储在客户端(本地存储)中。20 分钟后过期。
- 刷新令牌:存储在客户端(本地存储)和服务器(数据库)中。3个月到期。
- 刷新“窗口”为一周,因此该周内无需重新登录即可刷新令牌。
- 3 个月后刷新令牌过期,因此用户必须重新登录。
当用户注销时,我从本地存储中删除访问和刷新令牌。但我也应该删除服务器上的刷新令牌,所以我必须/logout向服务器发出请求。
是否应该对该注销请求进行身份验证?
让我们说是的。问题是如果用户没有登录(即访问令牌已过期),并且刷新窗口已经过去(比如说,一周),那么无法执行自动刷新,所以他将被迫登录,以便他可以注销。奇怪的!
另一种方法是让该端点期望访问和刷新令牌对,但 1) 允许访问令牌过期,以及 2) 确保访问令牌仍然有效,并且刷新令牌既有效又是最新的。在这种情况下,从数据库中删除刷新令牌。
处理此问题的典型方法是什么?有没有我没有考虑过的优点/缺点?