ในคำอธิบายการตั้งค่าด้านล่าง ดูเหมือนว่า 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:error] [pid 26485] [client SERVERIP:35888] oidc_clean_expired_state_cookies: สถานะหมดอายุแล้ว
ไม่มีข้อผิดพลาดเฉพาะที่บันทึกไว้ใน nginx
ดังนั้นคำถามที่นี่คือวิธีการส่งต่อส่วนหัวที่ถูกต้องจาก apache ไปยัง nginx เพื่อให้ผู้ใช้ที่ผ่านการรับรองความถูกต้องสามารถใช้แอปได้อย่างถูกต้องหรือมีการกำหนดค่าด้านล่างเพียงพอหรือต้องการการตั้งค่าเพิ่มเติมหรือไม่
ส่วนกำหนดค่า 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>
ส่วนกำหนดค่า nginx
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-ส่งต่อ-สำหรับ $remote_addr;
proxy_set_header X-ส่งต่อโฮสต์ $remote_addr;
proxy_redirect เริ่มต้น;
proxy_ssl_certificate /etc/pki/outcert/Certificate.pem;
proxy_ssl_certificate_key /etc/pki/outcert/CertificateKey.pem;
ปิด proxy_ssl_verify;
}