我正在使用Spring Stack(Spring Boot 2.0.0.RELEASE)创建一个站点,该站点通过OAuth2将用户身份验证/注册委托给Google。它是作为一些Spring Cloud微服务实现的,并在端口8080上运行了Zuul网关。
Google Auth Server
Zuul Gateway(:8080)
/ \
/ \
/ \
Other OAuth2 Client Microservice(:8000)
Microservices
我将Google用作OAuth2服务器,并将spring-security-oauth2用作客户端,这是作为单独的微服务实现的。如果我所有的云都部署在本地主机上,则一切正常。但是如果我的微服务部署在不同的机器上,例如Docker,OAuth2登录不起作用。收到无效的重定向Uri参数错误。
Docker的Zuul配置:
zuul:
ignoredServices: '*'
host:
connection-timeout-millis: 20000
socket-timeout-millis: 20000 routes:
authserver_oauth:
path: /oauth2/**
serviceId: authserver
stripPrefix: false
sensitiveHeaders:
Eureka Docker配置:
eureka:
instance:
prefer-ip-address: false
client:
serviceUrl:
defaultZone: http://eureka-server:8761/eureka/
Authserver配置:
spring:
security:
oauth2:
client:
registration:
google:
clientId: ***
clientSecret: ***
redirectUriTemplate: "{baseUrl}/oauth2/callback/{registrationId}"
scope:
- email
- profile
当我调试Oauth2条件时,我得到的请求和响应的uri不相等:
authorizationResponse.getRedirectUri()
(java.lang.String) http://authserver:8080/oauth2/callback/google
authorizationRequest.getRedirectUri()
(java.lang.String) http://localhost:8080/oauth2/callback/google
答案 0 :(得分:0)
我在使用云环境(NGINX、Docker、Cubernettes)的 Spring boot 2.2.2RELEASE 中遇到了类似的问题,其中自定义 NGINX 配置根本不是一个选项。尝试过设置 x-forwarded-for 属性、使用 docker 模拟 prod、NGINX 设置 (https://juplo.de/how-to-redirect-to-spring-security-oauth2-behind-a-gateway-proxy-hiding-the-app-behind-a-reverse-proxy-gateway/) 等方法,但没有任何效果。最后,我将 Spring boot 版本更新为 2.4.1,无需任何其他配置即可运行。