จากเอกสาร:
เมื่อผู้ใช้กรอกรายละเอียดการเข้าสู่ระบบแล้ว แบบฟอร์มจะส่งคำขอ HTTP POST ไปยัง URL ที่ป้องกันด้วยรหัสผ่านเดิม mod_auth_form จะสกัดกั้นคำขอ POST นี้ และหากพบฟิลด์ HTML สำหรับชื่อผู้ใช้และรหัสผ่าน ผู้ใช้จะเข้าสู่ระบบ และ URL ที่ป้องกันด้วยรหัสผ่านเดิมจะถูกส่งคืนให้กับผู้ใช้เป็นคำขอ GET
ฉันมีงานที่พอร์ต 45001
และ apache ย้อนกลับพร็อกซีกับมัน ฉันใช้การรับรองความถูกต้องของแบบฟอร์มและ เอกสารข้อผิดพลาด
เพื่อบังคับให้เข้าสู่ระบบ นี่คือการกำหนดค่าของฉัน:
<VirtualHost myip:44302>
ServerName myserver.com
# Pass auth info
RequestHeader set X-Remote-User %{REMOTE_USER}s
# Login page is directly on the server - don't use reverse proxy
ProxyPass /login/ !
# Proxy all requests to the app running in a docker container
ProxyPreserveHost On
ProxyPass / http://localhost:45001/
ProxyPassReverse / http://localhost:45001/
# Require auth for all requests except the login page
<LocationMatch ^/(?!login).*$>
AuthType form
AuthName "login"
AuthFormProvider ldap
AuthLDAPURL <url>
AuthLDAPBindAuthoritative off
# Redirecting to login page if auth is needed
ErrorDocument 401 /login/index.html
# If authorization fails, return 403 insead of 401
AuthzSendForbiddenOnFailure On
# Use session cookie
Session On
SessionCookieName session path=/;httponly;
SessionCryptoPassphrase <passphrase>
Require valid-user
</LocationMatch>
</VirtualHost>
แบบฟอร์ม (ลดความซับซ้อนของคลาสและตัวแบ่ง div):
<form action="" method="POST">
<input name="httpd_username" type="text">
<input name="httpd_password" type="password">
<button type="submit">
Login
</button>
</form>
สำหรับสถานการณ์อื่นๆ ที่ฉันไม่ได้ใช้พร็อกซีย้อนกลับ เวิร์กโฟลว์ถูกต้อง:
- เข้าถึง URL
- ตรวจสอบคุกกี้เซสชัน
- ขอเข้าสู่ระบบหากจำเป็น
- ส่ง
HTTP รับ
ร้องขอไปยัง URL สกัดกั้นเดิม
แต่เมื่อฉันใช้ reverse-proxy แทนที่จะส่ง HTTP รับ
ตามคำขอที่ถูกสกัดกั้น apache จะส่ง โพสต์ HTTP
. แอปที่อยู่เบื้องหลังพร็อกซีใช้งานไม่ได้ โพสต์
และพิมพ์ข้อผิดพลาด
หากผู้ใช้รีเฟรชหน้า ทุกอย่างจะทำงานได้อย่างถูกต้องเนื่องจากคุกกี้เซสชันถูกตั้งค่าไว้แล้ว
อะไรเป็นสาเหตุของพฤติกรรมที่ไม่เหมาะสมนี้ และ/หรือ ฉันจะกำหนดค่าการรับรองความถูกต้องนี้ให้ทำงานอย่างถูกต้องได้อย่างไร