Рейтинг:0

Странная проблема с пересылкой заголовков аутентификации из apache в nginx — в запросе на продолжение не найден непустой заголовок (se_custid/ein)

флаг ng

При настройке, описанной ниже, похоже, что apache не может пересылать требуемые заголовки в nginx или nginx, в то время как пересылка исходного запроса не пересылает полный URL-адрес, а только относительный путь.

Идея здесь заключается в том, чтобы запрос к приложению, размещенному на nginx, аутентифицировался Azure ADFS. для этого apache играет роль прокси для любых запросов авторизации. Apache использует mod_auth_openidc и перенаправляет неаутентифицированный запрос в Azure ADFS. См. ниже.

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

Хотя пользователь правильно аутентифицируется Azure ADFS, он перенаправляется обратно на Nginx: 80, но браузер (из-за приложения) отображает странную ошибку «Не пустой заголовок (se_custid/ein) не найден в запросе на продолжение»

Еще две ошибки в журнале apache:

[auth_openidc: ошибка] [pid 26485] [client SERVERIP: 35888] oidc_clean_expired_state_cookies: срок действия истек

Никаких конкретных ошибок не зарегистрировано в nginx.

Итак, вопрос здесь в том, как перенаправить правильные заголовки из apache в nginx, чтобы пользователь после аутентификации мог правильно использовать приложение, или достаточно ли приведенной ниже конфигурации или требуются дополнительные настройки?

часть конфигурации апача

<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

нгинкс: 80


местоположение /нашеприложение/ {
  proxy_ssl_server_name включено;
  proxy_pass https://forever-authcheck.tire1network.com:6000;
  proxy_set_header se-journey "прямой";
  proxy_set_header Хост $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 по умолчанию;
  

  proxy_ssl_certificate /etc/pki/outcert/Certificate.pem;
  proxy_ssl_certificate_key /etc/pki/outcert/CertificateKey.pem;
  proxy_ssl_verify выключен;
}









Рейтинг:0
флаг ng

Хорошо, немного поработал над пониманием, развернул еще одну временную настройку, чтобы понять, копать больше журналов.

Вот текущее понимание запроса пользователя -> Nginx: 443/ourapp -> Apache: 6000-> Azure ADFS -> Azure возвращает URL в браузер -> Браузер запрашивает возвращаемый URL

При внимательном рассмотрении логов стало ясно, что происходит, Более того, это помогло ему понять это. более

После настройки ngnix для отправки правильных заголовков с портом и правильным хостом,

proxy_set_header X-Forwarded-Port "443";

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

что привело к правильным настройкам файлов cookie для original_url, apache и mod_auth_openidc.

Теперь перенаправление работает корректно, Претензии доходят до NGINX и до нашего приложения.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.