Spring Boot Sping Boot JWT刷新令牌

avkwfej4  于 2023-11-17  发布在  Spring
关注(0)|答案(2)|浏览(259)

如果JWT访问令牌过期,那么我们可以使用刷新令牌为特定登录的用户生成新的访问令牌。
我的问题是,如果用户在过去的4小时59分钟内执行活动(考虑到JWT访问令牌过期时间设置为5小时),JWT访问令牌将在1分钟后过期,假设1分钟后JWT访问令牌过期,那么为什么用户要调用refreshToken端点方法(手动调用refreshtoken端点以获取新的访问令牌)?
是什么,refreshToken端点会自动触发刚才的时刻访问令牌过期?请在这里洒一些光,谢谢!!

xv8emn3q

xv8emn3q1#

你只从后端考虑。在前端,我们主要创建一个axios拦截器。如果你得到401令牌过期错误,你应该从前端发送刷新令牌请求,并将新令牌放入cookie或会话存储等。然后你将使用axios重新发送不成功的请求。现在它必须正常工作。

j8ag8udp

j8ag8udp2#

当一个401请求使用拦截器从前端下来时,它可以被处理以自动更新。
通常,失败的请求会被排队并处理。

  1. const refresh = async (config: AxiosRequestConfig): Promise<AxiosRequestConfig> => {
  2. const refreshToken = Cookie.get("refreshToken");
  3. const expireAt = localStorage.getItem("expiresAt");
  4. let token = localStorage.getItem("accessToken");
  5. if (moment(expireAt).diff(moment()) < 0 && refreshToken) {
  6. const body = {
  7. refreshToken,
  8. };
  9. const { data } = await axios.post(`https://auth.server.com/auth/token`, body);
  10. token = data.data.accessToken;
  11. localStorage.setItem("accessToken", data.data.accessToken);
  12. localStorage.setItem(
  13. "expiresAt",
  14. moment().add(1, "hour").format("yyyy-MM-DD HH:mm:ss")
  15. );
  16. }
  17. config.headers["Authorization"] = `Bearer ${token}`;
  18. return config;
  19. };
  20. const refreshErrorHandle = (err: any) => {
  21. Cookie.remove("refreshToken");
  22. };
  23. export { refresh, refreshErrorHandle };

个字符

展开查看全部

相关问题