Spring Boot Sping Boot JWT刷新令牌

avkwfej4  于 7个月前  发布在  Spring
关注(0)|答案(2)|浏览(110)

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

xv8emn3q

xv8emn3q1#

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

j8ag8udp

j8ag8udp2#

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

const refresh = async (config: AxiosRequestConfig): Promise<AxiosRequestConfig> => {
  const refreshToken = Cookie.get("refreshToken");
  const expireAt = localStorage.getItem("expiresAt");
  let token = localStorage.getItem("accessToken");

  if (moment(expireAt).diff(moment()) < 0 && refreshToken) {
    const body = {
      refreshToken,
    };

    const { data } = await axios.post(`https://auth.server.com/auth/token`, body);

    token = data.data.accessToken;
    localStorage.setItem("accessToken", data.data.accessToken);
    localStorage.setItem(
      "expiresAt",
      moment().add(1, "hour").format("yyyy-MM-DD HH:mm:ss")
    );
  }

  config.headers["Authorization"] = `Bearer ${token}`;

  return config;
};

const refreshErrorHandle = (err: any) => {
  Cookie.remove("refreshToken");
};

export { refresh, refreshErrorHandle };

个字符

相关问题