要添加身份验证的 WebClient 过滤器 header

WebClient filter to add Authentication header

我即将对需要身份验证的外部服务执行一些请求 header。

身份验证服务是一项外部服务,为了检索令牌,我需要进行 HTTP 调用。

我正在考虑推进的策略是创建附加过滤器到调用此服务以获取令牌的 WebClient,然后将其添加到 header。

当然我要实现一些缓存层来检索令牌,但关键是我要向我的请求添加一个请求。

您认为这是一种有效的方法吗?或者我应该在主请求之外显式调用身份验证服务吗?

如果它是 OAuth2 并且您的请求需要 JWT 令牌,Spring 安全和 WebClient 也能够做到这一点 (Spring WebFlux based example, Spring Web example)。我不会在过滤器中实现此逻辑,而是创建一个 WebClient 过滤器来为每个请求设置 Authorization: Bearer XYZ header 并从 外部 [=25] 传递令牌=] 或 Spring.

你也可以看看这个library。它会定期为您在后台线程中获取 OAuth2 令牌,您可以将其传递给您的 WebClient.

WebClient 的自定义过滤器可能如下所示:

private ExchangeFilterFunction authHeader(String token) {
    return (request, next) -> next.exchange(ClientRequest.from(request).headers((headers) -> {
      headers.setBearerAuth(token);
    }).build());
}