การรวม SSO / การตรวจสอบสิทธิ์กับ 'บริการไดเรกทอรี' ภายนอก


15

ฉันกำลังจะเริ่มต้นสร้างต้นแบบสำหรับลูกค้าและหนึ่งในคุณสมบัติที่จำเป็นคือการรวมเข้ากับระบบการตรวจสอบ / ลงทะเบียนผู้ใช้ภายใน บริษัท

ระบบนี้จะทำหน้าที่เป็นฐานข้อมูลผู้ใช้ที่มีสิทธิ์และจัดเตรียมอินเทอร์เฟซ RESTful สำหรับการสร้างผู้ใช้ใหม่และพิสูจน์ตัวตนผู้ใช้ที่ถูกต้อง

  1. ฉันต้องสามารถสร้างผู้ใช้ใหม่ใน WP และเป็นส่วนหนึ่งของกระบวนการนั้นเรียกไปยัง API การตรวจสอบสิทธิ์ภายนอกเพื่อสร้าง / ตรวจสอบผู้ใช้นั้น

  2. บุคคลที่เป็นผู้ใช้ที่ถูกต้อง แต่ไม่รู้ว่า WP ควรสามารถล็อกอินเพื่อแสดงความคิดเห็นได้โดยไม่จำเป็นต้องลงทะเบียนบนไซต์ WP ด้วยตนเอง

  3. บุคคลที่ล็อกอินเข้าสู่เว็บไซต์โดยรวมควรทำการล็อกอินด้วย WordPress โดยอัตโนมัติ

ฉันคิดว่าต่อไปนี้เป็นวิธีที่จะไป

  • สำหรับ (1) - มีเบ็ดการลงทะเบียนที่ฉันสามารถใช้ได้หรือไม่?

  • สำหรับ (2) - ฉันสมมติว่าฉันขอตัวกรองการตรวจสอบสิทธิ์ - เช่นเมื่อมีคนพยายามเข้าสู่ระบบฉันดักที่โทรไปยังระบบภายนอกแล้วดำเนินการเข้าสู่ระบบ WP หรือเปลี่ยนเส้นทางไปยังกระบวนการลงทะเบียนที่ ( 1) ใช้เวลา oer

  • สำหรับ (3) - อ่านคุกกี้การเข้าสู่ระบบที่กำหนดโดยเว็บไซต์หลักและดำเนินการกับ (2)?

ฉันเดาว่าฉันจะต้องแทรกระเบียนลงในผู้ใช้และตาราง usermeta ด้วย

ดังนั้นข้างต้นทำให้รู้สึก - ฉันไม่ได้คิดเกี่ยวกับบางสิ่งบางอย่าง ทุกคนมีแหล่งข้อมูลที่ดีสำหรับการช่วยเหลือ (@hakre - ฉันเห็นว่าคุณทำงานนี้แล้ว !!)

ปรับปรุง

ดังนั้นฉันยังคงทุบตีหัวของฉันกับบิตนี้เป็นหลักฉันพยายามขอเข้าสู่ตัวกรองรับรองความถูกต้องและใช้ที่:

  1. ตรวจสอบว่ามีการตั้งค่าคุกกี้การเข้าสู่ระบบสำหรับไซต์ 'ต้นแบบ' หรือไม่และตรวจสอบความถูกต้องกับ API การตรวจสอบความถูกต้องของพวกเขาหรือไม่และถ้าถูกต้องให้บังคับเข้าสู่ระบบ WP ด้วยwp_signon()โดยใช้ข้อมูลที่มีอยู่ในคุกกี้ไซต์หลัก เป็นหนังสือรับรองสำหรับ WP
  2. หากไม่ได้ตั้งค่าคุกกี้ให้เปลี่ยนเส้นทางไปที่หน้าลงชื่อเข้าใช้เว็บไซต์หลักและรับการเข้าสู่ระบบ / สมัครสมาชิกจากนั้นกลับสู่ขั้นตอนที่ 1
  3. หากไม่มีผู้ใช้ WP เมื่อมีผู้ใช้ไซต์หลักที่ผ่านการตรวจสอบแล้วให้สร้างและลงชื่อเข้าใช้แบบ 'โปร่งใส' (เช่นเพื่อให้ผู้ใช้ไม่เห็นรูปแบบการเข้าสู่ระบบ WP)

โดยทั่วไปฉันต้องการซ่อนฟอร์มการเข้าสู่ระบบ WP ทั้งหมดสำหรับผู้ใช้ที่เพิ่งจะแสดงความคิดเห็นเป็นหลักและต่อมาหาวิธีที่จะอนุญาตให้ผู้เขียนและผู้ดูแลระบบสามารถเข้าถึงได้โดยตรง

มันจะค่อนข้างช้านี่คือสิ่งที่ฉันสามารถใช้ความช่วยเหลือกับ:

  • ตัวกรองการรับรองความถูกต้องเป็นสิ่งที่ถูกต้องที่จะใช้? ดูเหมือนว่าจะไม่ได้รับการเรียกในทุกสถานการณ์ที่ฉันคาดหวัง - เช่นวิดเจ็ต meta แสดงลิงค์เข้าสู่ระบบ / ออกจากระบบโดยไม่ต้องตรวจสอบความถูกต้อง

  • ฉันสามารถwp_signon()กลับWP_Userวัตถุ (ระบุความสำเร็จ) แต่มันไม่ได้ส่งผลกระทบต่อสถานะการเข้าสู่ระบบ - เช่นเครื่องมือ meta จะยังคงแสดงใน "เข้าสู่ระบบ" แม้หลังจากรีเฟรช

ความช่วยเหลือใด ๆ ที่ได้รับสุดซึ้ง :)


อาจเป็นคำถามแยกต่างหาก
anu

โอ้และฉันไม่รู้ว่าจะได้รับอนุญาตให้พูดถึง แต่ฉันยินดีจ่ายเงินครึ่งวันหรือมากกว่านั้นเพื่อขอความช่วยเหลือ - รายละเอียดการติดต่อในโปรไฟล์ของฉัน
anu

คำตอบ:


12

ตกลงวิธีการทำงานสำหรับฉันมีดังนี้:

  1. สมมติว่าฐานข้อมูลผู้ใช้เว็บไซต์หลักมีสิทธิ์ คุกกี้การเข้าสู่ระบบเว็บไซต์หลักมี ID และแฮชของรหัสผ่านของไซต์

  2. รับคุกกี้จากเว็บไซต์หลักและตรวจสอบความถูกต้องอีกครั้งกับ API การตรวจสอบสิทธิ์ของเว็บไซต์หลัก

  3. หากถูกต้องให้ใช้ที่อยู่อีเมลจากค่าส่งคืนเป็น'user_login'ค่าสำหรับ WP และรหัสผ่านของไซต์ที่แฮชเป็นรหัสผ่าน WP

  4. ทดสอบว่าผู้ใช้รายนี้มีอยู่ใน WP โดยใช้wp_authenticate('user_login', 'user_pass')หรือไม่ สิ่งนี้ส่งคืนWP_Userออบเจกต์สำเร็จหรือWP_Errorออบเจ็กต์ล้มเหลว

  5. หากWP_Error/is_wp_error()ใช้wp_update_user()เพื่อสร้างผู้ใช้ (หรืออัปเดตผู้ใช้ด้วยรหัสผ่านที่เปลี่ยนแปลง)

  6. เข้าสู่ระบบผ่านทางwp_set_current_user(), wp_set_auth_cookie()และdo_action('wp_login, id)

(นี่คือทั้งหมดที่มีอยู่ในฟังก์ชั่นที่แนบมากับการ'init'กระทำ)

ดูเหมือนว่าจะใช้งานได้ - ผู้ใช้ไซต์ที่ไม่รู้จัก WP จะถูกสร้างขึ้นโดยอัตโนมัติ การเปลี่ยนรหัสผ่านนั้นรองรับและหากมีการตั้งค่าคุกกี้ของเว็บไซต์และมีผู้ใช้ WP อยู่ SSO นั้นจะทำงานอัตโนมัติและราบรื่น


1
+1 คำอธิบาย / คำตอบที่ดีเลิศ หวังว่าคุณจะหาเวลาหนึ่งวันเพื่อแสดงรายละเอียดเพิ่มเติมเล็กน้อยในวันเดียว จะช่วยให้เราคนอื่น ๆ เพื่อหลีกเลี่ยงมากที่สุดของการทดลอง / Erro;)
ไกเซอร์

1
นี่คือสิ่งที่ฉันกำลังมองหาคุณสามารถอธิบายความก้าวหน้าได้มากกว่านี้อีกหรือไม่ ขั้นตอนพิเศษ 1,2,3 ไม่ชัดเจนสำหรับฉัน ขอบคุณ !!
chifliiiii

3

ระบบการพิสูจน์ตัวตนทั้งหมดสามารถเสียบปลั๊กได้ ฉันขอแนะนำให้ดูที่ปลั๊กอินที่มีอยู่เพื่อรับทราบวิธีการแทนที่ระบบ บางทีโดยดูที่ปลั๊กอิน LDAPบ้าง?


ใช่และไม่มีความหมายที่จะต่อว่าต่อขานนั่นชัดเจน !!
anu

สำหรับข้อมูลบางอย่างที่อาจช่วยสะท้อนสถานะการลงชื่อเข้าใช้ของผู้ใช้โปรดดูคำตอบสำหรับคำถามอื่น ๆ ของฉัน: wordpress.stackexchange.com/questions/8998/…
Dougal Campbell

1

ฟังก์ชั่นที่เกี่ยวข้องกับผู้ใช้จำนวนมากถูกกำหนดเงื่อนไข !function_exists()ในwp-includes/pluggable.phpและง่ายต่อการแทนที่ด้วยรุ่นของคุณเอง


1

การเปิดใช้งานการลงชื่อเพียงครั้งเดียวใน WordPress ทำให้ฉันต้องดิ้นรนมากกว่า 18 ชั่วโมง แต่อาจใช้เวลาคุณเพียงไม่กี่นาที:

โดยทั่วไปคุณจะต้องใช้https://wordpress.org/plugins/wp-force-login/และเวอร์ชันที่แก้ไขของ https://as.wordpress.org/plugins/jwt-authenticator/แล้วสร้างรับรองความถูกต้อง - ป้องกันจุดปลายบนเว็บไซต์หลักของคุณที่สร้าง JWT (JSON Web Token) และเปลี่ยนเส้นทางกลับไปยัง URL พิเศษของเว็บไซต์ WordPress ของคุณ

ดูรหัสเต็มได้ที่นี่


ขอบคุณสำหรับคำตอบ. ลิงก์คำตอบเท่านั้นที่จะหมดกำลังใจเนื่องจากการเชื่อมโยงสามารถหายไปและจะทำให้คุณตอบไร้ประโยชน์ มันจะดีกว่าที่จะรวมบิตที่เกี่ยวข้องที่นี่
ไก
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.