我有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)
答案 0 :(得分:0)
我找到了解决方案。它通过zull代理进行连接,默认情况下zuul代理会过滤掉Authorization标头。将此添加到zuul配置中即可使用:zuul.sensitiveHeaders: Cookie,Set-Cookie