ฉันมีข้อกำหนดที่ฉันต้องแทนที่การตรวจสอบผู้ใช้เริ่มต้นด้วยการตรวจสอบของเซิร์ฟเวอร์กลางเช่นเซิร์ฟเวอร์ SSO
ด้วยการแก้ไขข้อบกพร่อง Drupal ฉันรู้ว่าการจัดการเซสชันทั้งหมดเกิดขึ้นในincludes/session.inc
ไฟล์ ฉันต้องการตรวจสอบสิทธิ์ตามที่แสดงในภาพ:
สถานการณ์: เข้าสู่ระบบ
รายละเอียดของขั้นตอนจะเป็น:
- แทนที่ฟอร์มล็อกอินเพื่อส่งชื่อผู้ใช้และรหัสผ่านไปยังเซิร์ฟเวอร์ SSO ( ไม่ใช่บน Drupalแต่เป็นบน. NET)
- ตรวจสอบผู้ใช้บนเซิร์ฟเวอร์ SSO โดยใช้ฐานข้อมูลของไซต์นั้น และส่งคำตอบกลับไปยังหน้า PHP ที่กำหนดเองของเว็บไซต์ของฉัน (หรือแบบฟอร์มโดยโมดูล?)
- ใช้การตอบกลับระบุผู้ใช้ในตารางผู้ใช้และสร้างเซสชันสำหรับผู้ใช้นั้นโดยไม่ตรวจสอบรหัสผ่าน (เพราะจะหมายถึงการพิสูจน์ตัวตนสองครั้ง) โดยค่าเริ่มต้น Drupal ชุดคุกกี้ที่มีชื่อของตัวแปรและมีความคุ้มค่า
$insecure_session_name
$sid
ฉันต้องการ Drupal ไม่ให้ตั้งค่าคุกกี้ที่นี่แทนส่งค่าของตัวแปรไปยังเซิร์ฟเวอร์ SSO - เซิร์ฟเวอร์ SSO จะรับค่าสร้างคุกกี้และวางในโดเมนหลัก
domain.com
(เพื่อเตือนให้ทั้งคู่my website
และsso server
อยู่ในโดเมนย่อยของโดเมนหลักซึ่งไม่ได้อยู่ใน Drupal ด้วย) จากนั้นเว็บไซต์ drupal สามารถเข้าสู่ระบบโดยใช้คุกกี้นั้น
ฉันรู้ว่ามันเป็นคำถามที่ยากมากฉันแค่มองหาพอยน์เตอร์ว่าจะเริ่มอย่างไรดี? ตามที่พวกเขาพูดว่า "คุณไม่ควรแฮ็คหลัก" ดังนั้นคำถามของฉันคือ:
- ฉันควรค้นหาเพื่อทำความเข้าใจว่า Drupal authentication และการจัดการเซสชันทำงานในเชิงลึกได้อย่างไร
- มีวิธีที่ฉันสามารถเรียกใช้ฟังก์ชั่นในการ
includes/session.inc
ใช้ hooks (ตามความเห็นที่มีฟังก์ชั่นบอกว่า "สำหรับการใช้งานภายในเท่านั้น / ไม่ได้รับการแก้ไข")?
หมายเหตุ:ฉันจะใช้วิธีการเดียวกันในการลงทะเบียนผู้ใช้เพื่อให้ระเบียนยังคงอยู่ในฐานข้อมูลกลางของเซิร์ฟเวอร์ SSO และในระหว่างนั้นจะใส่รหัสผ่านขยะสำหรับผู้ใช้เดียวกันในฐานข้อมูลของเว็บไซต์ Drupal (เนื่องจากรหัสผ่านจะไม่ถูกตรวจสอบในขณะที่เข้าสู่ระบบ)