Seltsames Problem beim Weiterleiten von Authentifizierungsheadern von Apache an Nginx - Nicht leerer Header (se_custid/ein) in der Anfrage zum Fortfahren nicht gefunden

Seltsames Problem beim Weiterleiten von Authentifizierungsheadern von Apache an Nginx - Nicht leerer Header (se_custid/ein) in der Anfrage zum Fortfahren nicht gefunden

Bei dem unten beschriebenen Setup sieht es so aus, als ob Apache nicht in der Lage ist, die erforderlichen Header an Nginx weiterzuleiten, oder dass Nginx bei der Weiterleitung der ursprünglichen Anforderung nicht die vollständige URL, sondern nur den relativen Pfad weiterleitet.

Die Idee besteht darin, sicherzustellen, dass Anfragen an auf nginx gehostete Anwendungen von Azure ADFS authentifiziert werden. Damit dies funktioniert, übernimmt Apache die Rolle des Proxys für alle Authentifizierungsanfragen. Apache verwendet mod_auth_openidc und leitet nicht authentifizierte Anfragen an Azure ADFS weiter. Siehe unten:

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

Der Benutzer wird zwar von Azure ADFS korrekt authentifiziert, wird aber zu Nginx:80 zurückgeleitet, aber der Browser zeigt (aufgrund der App) den seltsamen Fehler „In der Anforderung zum Fortfahren wurde kein nicht leerer Header (se_custid/ein) gefunden“ an.

Zwei weitere Fehler im Apache-Protokoll sind:

[auth_openidc:error] [pid 26485] [client SERVERIP:35888] oidc_clean_expired_state_cookies: Status ist abgelaufen

In nginx wurden keine spezifischen Fehler protokolliert.

Die Frage hier ist also, wie die richtigen Header von Apache an Nginx weitergeleitet werden, damit der Benutzer nach der Authentifizierung die App korrekt verwenden kann, oder ist die folgende Konfiguration ausreichend oder sind weitere Einstellungen erforderlich?

Apache-Konfigurationsteil

<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>



Nginx-Konfigurationsteile

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;
}









Antwort1

okay, habe ein bisschen herumprobiert, um das zu verstehen, habe ein weiteres temporäres Setup bereitgestellt, um mehr Protokolle auszugraben.

Hier ist der aktuelle Kenntnisstand Benutzeranforderung -> Nginx:443/ourapp -> Apache:6000-> Azure ADFS ->Azure gibt die URL an den Browser zurück ->Der Browser fordert die zurückgegebene URL an

Durch genaues Betrachten der Protokolle war klar, was passiert ist. Darüber hinaus half dies, es zu verstehenmehr

Nach der Anpassung von ngnix, um die richtigen Header mit Port und richtigem Host zu senden,

proxy_set_header X-Forwarded-Port "443";

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

was zu den richtigen Cookie-Einstellungen für original_url durch Apache und mod_auth_openidc führte.

Jetzt funktioniert die Weiterleitung ordnungsgemäß, die Ansprüche erreichen NGINX und unsere App.

verwandte Informationen