Spring OAuth2客户端未发送授权标头

时间:2018-11-27 18:19:31

标签: spring spring-boot spring-security-oauth2

我有2个微服务。 1是作为在端口8000上运行的oauth2服务器的Spring boot 2项目设置,另一个是在端口8001上运行的Spring boot 2项目oauth2客户端。

我已经安装了oauth服务器,并且可以确认它正在工作,因为使用客户端ID和密码登录时会收到令牌。我使用Postman在/ oauth / token上发布了帖子,我可以看到其中的内容。我看到了访问令牌和刷新令牌。

然后我使用Postman调用另一个微服务,该另一个微服务是作为oauth2客户端设置的Spring引导项目。我使用Postman作为oauth2授权来设置访问令牌,并且可以看到Authorization: Bearer TOKEN已添加到标题中。然后,我调用oauth2客户端,并在其中调用以下端点:

@GetMapping("/api/user/test")
@PreAuthorize("isAuthenticated()")
public MyObject doTest() {
    return new String("Test");
}

当我调用该URL时,可以确定spring向oauth服务器发送了一个请求以获取当前用户。在我的application.yml中,我有以下内容,以便spring知道oauth服务器在哪里:

security:
  oauth2:
    resource:
      user-info-uri: http://localhost:8000/oauth/user

到目前为止,一切都很好。现在这是事情。我调试了http://localhost:8000/oauth/user url,根据spring,主体为​​null。我发现问题出在哪里。我的配置错误或在Spring中存在一个巨大的错误,因为当我向oauth2服务器添加过滤器并打印所有标头时,这就是我所看到的:

Header: application/json Header: Java/1.8.0_181 Header: localhost:8000 Header: http Header: 8000 Header: 172.20.0.1 Header: gzip Header: 0 Header: 192.168.178.153:9001 Header: Keep-Alive

如您所见,没有授权头。显然,在调用user-info-uri时,spring oauth2客户端没有发送Authorization标头。有人可以帮忙吗?

我需要知道如何配置我的spring boot oauth2客户端,以便每个需要身份验证的URL都将调用某个URL以获取当前用户。

预先感谢, 马丁(Martijn)

1 个答案:

答案 0 :(得分:0)

我找到了解决方案。它通过zull代理进行连接,默认情况下zuul代理会过滤掉Authorization标头。将此添加到zuul配置中即可使用:zuul.sensitiveHeaders: Cookie,Set-Cookie