Problema de proxy Nginx oauth2 (https-> http)

Problema de proxy Nginx oauth2 (https-> http)

  • Ao implementar a autenticação do usuário no ambiente oficial do sistema recentemente, ocorreu um problema ao fazer login. No ambiente de desenvolvimento local, tudo está normal, mas um servidor colocaria falha de autenticação, revise o log encontrado OAuth2os redirectUriparâmetros não correspondem

  • O entendimento é por meio do springboot, por meio UrlUtils.buildFullRequestUrl(request)da HttpServletRequestaquisição de redirectUri:

OAuth2LoginAuthenticationFilter

String redirectUri = UriComponentsBuilder.fromHttpUrl(UrlUtils.buildFullRequestUrl(request))
                .replaceQuery(null)
                .build()
                .toUriString();

  • Configure o servidor nginxcomo um servidor proxy reverso, o que resulta em Spring, você não consegue corrigir schemee host, o que levou a redirectUrinão corresponder corretamente para que a autenticação falhou.

Resolva o problema

1: Primeiro, o protocolo HTTP do proxy de encaminhamento de https, para oferecer suporte a vários domínios, e definir o valor do protocolo springboot Tomcat do cabeçalho https: "https" é https

** Nginx **

	proxy_set_header HOST $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;

Tomcat

  • 1. Se for Tomcat incorporado em springboot, application.yml deve ser configurado com os seguintes parâmetros
server:
  tomcat:
    remote-ip-header: "X-Forwarded-For"
    protocol-header: "X-Forwarded-Proto"
    protocol-header-https-value: "https
  • 2. Se for Tomcat, basta configurar os seguintes parâmetros
<Engine >
    <Valve className="org.apache.catalina.valves.RemoteIpValve"  
    remoteIpHeader="X-Forwarded-For"  
    protocolHeader="X-Forwarded-Proto"  
    protocolHeaderHttpsValue="https"/> 
</Engine >

O que resolveu isso? Claro, preste atenção à última etapa. ,

Basta prestar atenção ao prefixo do proxy Nginx: por exemplo, sou https://craywen.top/pms

Ao fazer proxy para http://127.0.0.1:8099 por meio de rota de correspondência pms nginx (^ ~ / pms)

Preste atenção nisso, depois que o código redirectUritrará pms, existem duas soluções

1: Configure o URL de redirecionamento no Nginx

rewrite ^/user/(.*)$ /$1 break;
proxy_pass http://user;

2: Adicionar / pms à lista de permissões de oauth2

  • Consulte https://www.jianshu.com/p/cf0056c64fa4

Acho que você gosta

Origin blog.csdn.net/qq_38893133/article/details/107856646
Recomendado
Clasificación