在春季启动微服务docker实现中,Google oauth2的无效重定向uri参数

时间:2019-07-17 07:48:00

标签: spring-boot docker oauth-2.0 microservices netflix-zuul

我正在使用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

1 个答案:

答案 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,无需任何其他配置即可运行。