【问题标题】:Spring Cloud - How to configure OAuth2RestTemplate on Zuul reverse proxy to pass authorization tokens through?Spring Cloud - 如何在 Zuul 反向代理上配置 OAuth2RestTemplate 以传递授权令牌?
【发布时间】:2018-01-15 06:24:33
【问题描述】:

我使用 Zuul 作为反向代理,将请求路由到我的微服务。我还在此反向代理上启用了资源服务器 (@EnableResourceServer),因此请求被授权针对我的授权服务器。没有资源服务器的配置,只是对一些请求进行了一些安全绕过,仅此而已。在将请求路由到其他微服务时,此反向代理也只是简单地传递 OAuth2 标头,以便其他微服务能够根据需要执行所有与安全相关的事情。一切都很完美......但是。

我创建的 zuul 过滤器之一是用于资源扩展的过滤器。这意味着它会根据提供的 url 参数自动获取所有相关资源(例如,对于员工资源,url 参数可以是“expand=manager,contacts”,它使用员工资源上的 HAL 链接获取所有这些附加数据,并将附加数据添加到_在 JSON 中嵌入字段)。

我遇到的问题是,当我做这个扩展时,我需要使用 RestTemplate 来做扩展(以获取所有应该嵌入的数据)。我无法弄清楚如何配置 OAuth2RestTemplate 因此它将 OAuth2 授权标头添加到传出请求中。 我已经从 spring cloud 文档中尝试过这个:

@Bean
public OAuth2RestTemplate restTemplate(UserInfoRestTemplateFactory factory) {
    return factory.getUserInfoRestTemplate();
}

但是我有一些来自 OAuth2TokenRelayFilter 的空指针异常。这个过滤器里面有一个条件htat看起来像这样:

restTemplate.getResource().getClientId()
                .equals(auth.getOAuth2Request().getClientId())

但是 restTemplate.getResource() 返回 null 并且 OAuth2Request 实例上的 getClientId() 返回 null...看起来我真的错过了一些东西。

在引入 OAuth2 之前,RestTemplate 的设置是:

@Bean
@LoadBalanced
RestTemplate restTemplate() {
    return new RestTemplate();
}

如您所见,还需要负载平衡(使用 Ribbon 进行负载平衡,Eureka 用于基于一个服务别名的服务发现,因此 zuul config 中没有直接 url)

任何建议如何设置它?

谢谢, 卢卡斯

【问题讨论】:

  • 据我所知,OAuth2RestTemplate 将尝试从 OAuth2 服务器获取新令牌,而不是将现有令牌传递给您的员工资源。尝试提供只会传递现有令牌的自定义令牌提供程序。
  • @tsolakp 但是我没有在这个代理上配置 OAuth2 客户端,所以它不知道 clientId 和 clientSecret。所以实际上这可能是问题所在。但是,我从 spring 云文档章节之一(关于令牌中继)中了解到,它应该只与资源服务器一起使用,并且不需要 OAuth2 客户端。

标签: java spring spring-security spring-cloud netflix-zuul


【解决方案1】:

所以经过进一步调查后,我将反向代理也配置为 OAuth2Client,以便为每个请求正确设置安全上下文 OAuth2TokenRelayFilter 开始工作。

Spring cloud 文档章节“资源服务器令牌中继”描述了以下“其余模板将具有身份验证过滤器使用的相同 OAuth2ClientContext(请求范围)”。 ... 这意味着客户端必须由 @EnableOAuth2Client 启用,以便正确设置 OAuth2ClientContext。

希望我理解正确。

卢卡斯

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-04
    • 2019-10-20
    • 2016-10-28
    • 2023-03-11
    • 2018-01-28
    • 2016-06-05
    • 2023-03-05
    • 2020-07-03
    相关资源
    最近更新 更多