Problema estranho com o encaminhamento de cabeçalhos de autenticação do Apache para o nginx - Cabeçalho não vazio (se_custid/ein) não encontrado na solicitação para prosseguir

Problema estranho com o encaminhamento de cabeçalhos de autenticação do Apache para o nginx - Cabeçalho não vazio (se_custid/ein) não encontrado na solicitação para prosseguir

Na configuração descrita abaixo, parece que o Apache não é capaz de encaminhar os cabeçalhos necessários para o nginx ou nginx enquanto o encaminhamento da solicitação inicial não está encaminhando o URL completo, mas apenas o caminho relativo.

A ideia aqui é garantir que a solicitação ao aplicativo hospedado no nginx seja autenticada pelo Azure ADFS. para que isso funcione, o Apache está desempenhando o papel de proxy para qualquer solicitação de autenticação. O Apache está usando mod_auth_openidc e encaminha solicitações não autenticadas para o Azure ADFS. Veja abaixo:

Nginx -> Apache:6000-> Azure ADFS -> Apache:6000 -> Nginx

Embora o usuário seja autenticado corretamente pelo Azure ADFS, ele é redirecionado de volta para Nginx:80, mas o navegador (devido ao aplicativo) exibe um erro estranho "Cabeçalho não vazio (se_custid/ein) não encontrado na solicitação para prosseguir"

Mais dois erros no log do Apache são:

[auth_openidc:error] [pid 26485] [client SERVERIP:35888] oidc_clean_expired_state_cookies: o estado expirou

Nenhum erro específico registrado no nginx.

Portanto, a questão aqui é como encaminhar os cabeçalhos corretos do Apache para o nginx para que o usuário após a autenticação possa usar o aplicativo corretamente ou a configuração abaixo é suficiente ou mais configurações são necessárias?

parte de configuração do apache

<Location /ourapp>
   AuthType openid-connect
   Require valid-user
</Location>

LoadModule auth_openidc_module modules/mod_auth_openidc.so
OIDCProviderMetadataURL https://login.microsoftonline.com/XXXX_XXX-xxx-XXXXXX/v2.0/.well-known/openid-configuration
OIDCClientID XXXXXXXXXXXXXXX
OIDCClientSecret XXXXXXXXXX
OIDCRedirectURI https://forever-authcheck.tire1network.com:6000/ourapp 
OIDCCryptoPassphrase XXXXXXXXXXXX
OIDCScope "openid email profile"
#OIDCRemoteUserClaim email
OIDCProviderAuthorizationEndpoint https://login.microsoftonline.com/XXXX_XXX-xxx-XXXXXX/oauth2/v2.0/authorize
OIDCProviderTokenEndpoint https://login.microsoftonline.com/XXXX_XXX-xxx-XXXXXX/oauth2/v2.0/token
#OIDCPKCEMethod S256

OIDCPassIDTokenAs claims
OIDCCookiePath /
OIDCCookieDomain forever-authcheck.tire1network.com
OIDCCookie APP-OIDC-SESSION
OIDCCookieHTTPOnly On
OIDCSessionInactivityTimeout 600
OIDCSessionMaxDuration 36006

<VirtualHost *:6000>

    ProxyPreserveHost On
    ErrorLog  /var/log/httpd/voidcerror.log
    LogLevel debug
    ServerName forever-authcheck.tire1network.com

    Header always set Access-Control-Allow-Origin "*"
    Header always set Access-Control-Allow-Methods "POST, GET, OPTIONS, DELETE, PUT"
    Header always set Access-Control-Max-Age "1000"
    Header always set Access-Control-Allow-Headers "x-requested-with, Content-Type, origin, authorization, accept, client-security-token"
    
    ProxyPreserveHost On
    Header set ein %{OIDC_CLAIM_EIN}e
    ProxyPass /ourapp/ forever-authcheck.tire1network.com/in/
    ProxyPassReverse /ourapp/ forever-authcheck.tire1network.com/in/
    ProxyPreserveHost On
    ServerName  forever-authcheck.tire1network.com
    
    SSLEngine on
    SSLCertificateFile "/etc/pki/outcert/Certificate.pem"
    SSLCertificateKeyFile "/etc/pki/outcert/CertificateKey.pem"
    SSLCertificateChainFile "/etc/pki/outcert/CertificateChain.p12"
</VirtualHost>



partes de configuração do nginx

nginx:80


location /ourapp/ {
  proxy_ssl_server_name on;
  proxy_pass https://forever-authcheck.tire1network.com:6000;
  proxy_set_header se-journey "direct";
  proxy_set_header  Host $host;
  proxy_set_header  X-Real-IP $remote_addr;
  proxy_set_header  X-Forwarded-For $remote_addr;
  proxy_set_header  X-Forwarded-Host $remote_addr;
  proxy_redirect default;
  

  proxy_ssl_certificate     /etc/pki/outcert/Certificate.pem;
  proxy_ssl_certificate_key /etc/pki/outcert/CertificateKey.pem;
  proxy_ssl_verify       off;
}









Responder1

tudo bem, fiz algumas alterações no entendimento, implantei outra configuração temporária para entender a escavação de mais logs.

Aqui está o entendimento atual Solicitação do usuário -> Nginx:443/ourapp -> Apache:6000-> Azure ADFS ->Azure retorna URL para navegador ->O navegador solicita o URL retornado

Observando os logs de perto, ficou claro o que está acontecendo. Mais sobre este ajudou a entendermais

Depois de ajustar o ngnix para enviar cabeçalhos corretos com porta e host correto,

proxy_set_header X-Forwarded-Port "443";

proxy_set_header X-Forwarded-Host "forever-authcheck.tire1network.com";

o que resultou em configurações corretas de cookies para original_url, por apache e mod_auth_openidc.

Agora o redirecionamento funciona corretamente, as reclamações estão chegando ao NGINX e ao nosso aplicativo.

informação relacionada