【问题标题】:WebClient filter to add Authentication headerWebClient 过滤器以添加身份验证标头
【发布时间】:2020-04-24 01:21:50
【问题描述】:

我即将实现一些对需要身份验证标头的外部服务的请求。

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

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

当然我要实现一些缓存层来检索令牌,但重点是我要在我的请求中添加一个请求。

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

【问题讨论】:

    标签: spring-boot http webclient spring-webclient


    【解决方案1】:

    如果它是 OAuth2 并且您的请求需要 JWT 令牌,Spring Security 和 WebClient 也能够执行此操作(Spring WebFlux based exampleSpring Web example)。我不会在过滤器中实现这个逻辑,而是创建一个WebClient 过滤器来为每个请求设置Authorization: Bearer XYZ 标头并从外部 或通过Spring 传递令牌。

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

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

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

    【讨论】:

    • 你能告诉我“字符串令牌”参数的来源吗?我的意思是,我们必须将此过滤器包含到 Webclient.builder().. 阶段。所以这里这个参数是不可用的吧?
    • 在使用构建器创建WebClient 时,无需对令牌进行硬编码,而是可以传递一个 lambda 函数,该函数代表调用您的令牌提供程序来检索最新令牌
    猜你喜欢
    • 1970-01-01
    • 2015-02-12
    • 2014-09-04
    • 2011-06-21
    • 1970-01-01
    • 2015-05-03
    • 2014-08-08
    • 2014-04-29
    • 2014-06-02
    相关资源
    最近更新 更多