Olá Marcos.
O problema não é no Spring, e sim no ambiente onde sua aplicação está rodando.
Quando a aplicação roda dentro de um container Kubernetes/Cloud Run/Compute Engine, o Google OAuth não aceita um redirect_uri que contenha:
- nome de container (ex.:
http://app:8080/...) - hostname local
- IP interno (ex.:
10.x.x.x) - qualquer domínio que não seja público e verificável
Seu service dentro do cluster está acessível via nome interno http://app:8080/, mas isso não é um domínio público.
O Google Identity Platform só redireciona para URIs:
- iniciando com https
- usando um domínio público válido (ex.:
seusite.com, meuapp.cloud.goog) - ou localhost, APENAS para ambiente local
Logo, o Google nunca irá redirecionar para http://app:8080/....
Como resolver corretamente
- Coloque sua aplicação atrás de um endereço público
Dependendo onde você implantou:
Se estiver no Cloud Run
Você terá uma URL pública do tipo:
https://NOME-DO-SERVIÇO-xxxxx.a.run.app
Então o redirect correto será:
https://NOME-DO-SERVIÇO-xxxxx.a.run.app/login/oauth2/code/google
Se estiver em Kubernetes (GKE)
Crie um Ingress com um domínio público:
https://meuapp.com/login/oauth2/code/google
Ou use o domínio padrão do GKE:
https://<ip>.nip.io/login/oauth2/code/google
O Google aceita *.nip.io pois resolve para IP público.
- Cadastre o redirect no Google Cloud Console
Acesse:
APIs & Services → Credentials → OAuth 2.0 Client IDs → Authorized redirect URIs
Cadastre:
https://MEU_DOMINIO/login/oauth2/code/google
- Configure no Spring Boot
application-prod.properties:
spring.security.oauth2.client.registration.google.redirect-uri={baseUrl}/login/oauth2/code/google
spring.security.oauth2.client.registration.google.client-id=SEU_ID
spring.security.oauth2.client.registration.google.client-secret=SEU_SECRET
spring.security.oauth2.client.provider.google.authorization-uri=https://accounts.google.com/o/oauth2/v2/auth
E defina server.forward-headers-strategy=native se estiver atrás de um proxy:
server.forward-headers-strategy=native
O Spring automaticamente substituirá {baseUrl} pelo domínio público.
Você precisa expor a aplicação em um domínio público HTTPS (Cloud Run, Ingress no GKE, Load Balancer etc.), e então usar este domínio como redirect_uri.
Testa ai e avise o resultado.
Bons estudos.