Authentication 刷新JWT令牌后如何重试API调用?

Authentication 刷新JWT令牌后如何重试API调用?,authentication,jwt,refresh-token,auth-token,Authentication,Jwt,Refresh Token,Auth Token,您好,我对JWT auth的前端流程不熟悉,想知道在发出新令牌时如何重新发送请求 根据我的理解,Auth令牌应该是短期的,而刷新令牌的寿命更长。这会导致一个问题,即请求经常由于过期的身份验证令牌而失败,并且必须使用新的身份验证令牌再次发送请求 维持这种模式的最佳实践是什么?作为一名POC,我写了一个简短的片段来展示我的想法,但我觉得可能有更好的方法 const API_FETCH_ATTEMPTS = 2; const refreshAPI = 'backend/refresh'; func

您好,我对JWT auth的前端流程不熟悉,想知道在发出新令牌时如何重新发送请求

根据我的理解,Auth令牌应该是短期的,而刷新令牌的寿命更长。这会导致一个问题,即请求经常由于过期的身份验证令牌而失败,并且必须使用新的身份验证令牌再次发送请求

维持这种模式的最佳实践是什么?作为一名POC,我写了一个简短的片段来展示我的想法,但我觉得可能有更好的方法

const API_FETCH_ATTEMPTS = 2; 
const refreshAPI = 'backend/refresh';

function customFetch(url, options, retryAttempts = API_FETCH_ATTEMPTS){

  if (!retryAttempts){
    return null 
  }
  const authToken = localStorage.getItem('auth-token');
  return fetch(url, {...options,'AuthToken': authToken})
    .then()// successful call
    .catch(err => {
      if (err.status === '401'){
        fetch(refreshAPI)
          .then(newToken => {
            localStorage.setItem('authToken', newToken)
            customFetch(url, options, retryAttempts - 1);
          });
      }
    });
}
非常感谢您的任何想法/帮助。
谢谢

您走的是正确的道路:

  • 期待401秒
  • 刷新访问令牌
  • 使用新令牌,仅重试一次API调用
  • 如果令牌刷新失败,请重定向用户以重新登录
我的偏好是使用两个类:

  • 调用API的服务代理
  • 用于执行OAuth工作的验证器类
下面是我的一些示例代码,尽管您可以用任何客户端语言实现此设计模式: