首页 > 解决方案 > 如何在 Spring Boot Rest 模板客户端中处理过期的刷新令牌

问题描述

我正在将第三方 API 集成到我的 Spring Boot 应用程序中。

第三方 API 身份验证的工作原理:

  1. 初始授权后,我获得了在给定时间后过期的刷新令牌和访问令牌
  2. 访问令牌过期后,我使用刷新令牌获取新的访问令牌和新的刷新令牌

使用当前的访问令牌,我可以调用 API。

有没有办法使用 RestTemplate 无缝处理这种情况?

我已经尝试手动处理这种情况,所以如果我从 API 得到 401,我发送了一个刷新令牌请求,重写了我返回的密钥并重试了请求,不确定如何处理存储 api 密钥以备不时之需重新启动服务器。

标签: javaspringspring-bootresttemplate

解决方案


这很容易通过 a来完成ClientHttpRequestInterceptor,您可以在其中替换请求标头,例如401

@Override
public ClientHttpResponse intercept(
  HttpRequest request, 
  byte[] body, 
  ClientHttpRequestExecution execution) throws IOException {

    ClientHttpResponse response = execution.execute(request, body);
    if(response.getStatusCode() == HttpStatus.UNAUTHORIZED) {
       request.getHeaders().replace("Auth-Header", getNewToken());
       return execution.execute(request, body);
    }
    return response;
}

请参阅此处以获取更多指导。


推荐阅读