สร้าง API สำหรับการลงชื่อเพียงครั้งเดียวด้วยไซต์ของบุคคลที่สาม


13

ไซต์ของฉันต้องรวมเข้ากับซอฟต์แวร์ของ บริษัท อื่นซึ่งจะอยู่ในโดเมนย่อยของตัวเองซึ่งโฮสต์โดย บริษัท ซอฟต์แวร์ ฉันต้องให้ปลายทางที่นักพัฒนาบุคคลที่สามสามารถใช้ในการโทร API (ไปยังไซต์ wordpress ของฉัน) เพื่อให้ผู้ใช้ของไซต์ของฉันสามารถเข้าถึงโดเมนย่อยได้

ไซต์อื่นจำเป็นต้องตรวจสอบสิทธิ์ผู้ใช้จากเว็บไซต์ของฉันผ่าน API บางประเภท

ฉันไม่แน่ใจว่าจะเริ่มจากตรงไหน แต่ความรู้สึกของฉันคือการที่ผู้คนฉลาดกว่าฉัน ขอบคุณล่วงหน้า!


1
การเรียก API ประเภทใดที่จำเป็นต้องใช้? คุณพยายามจะทำอะไร? คุณดูการสนับสนุน XML-RPC ของ WP ( codex.wordpress.org/XML-RPC_Support ) หรือไม่
anu

ไซต์อื่น ๆ จำเป็นต้องตรวจสอบ / รับรองความถูกต้องผู้ใช้จากเว็บไซต์ WP ของฉัน
emersonthis

คำตอบ:


16

ปัญหาการเขียนสคริปต์ข้ามไซต์

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

สร้าง API Endpoint

ลองดูบทความที่ฉันเพิ่งเขียนที่นี่: http://coderrr.com/create-an-api-endpoint-in-wordpress/

นอกจากนี้คุณสามารถดูการสาธิตรหัสได้ที่นี่: https://gist.github.com/2982319

คุณจะต้องคิดหาเหตุผลสำหรับความต้องการแอพของคุณเอง แต่สิ่งนี้จะช่วยให้คุณสร้างจุดปลายที่คุณสามารถให้บริการทุกสิ่งที่คุณต้องการจากด้าน WordPress

เนื่องจากคุณใช้ WordPress เป็นเว็บไซต์รับรองความถูกต้องคุณสามารถใช้เช็คเช่น is_user_logged_in () หากพวกเขาเข้าสู่ระบบกลับวัตถุผู้ใช้ไปยังบุคคลที่สามด้วยข้อมูลใด ๆ ที่พวกเขาต้องการ

เข้าสู่ระบบจากบุคคลที่สาม

จากบุคคลที่สามพวกเขาสามารถเชื่อมโยงไปยังหน้าเข้าสู่ระบบของคุณเพื่อรับประสบการณ์ที่ราบรื่นโดยใช้ redirect_to query var เมื่อลงชื่อเข้าใช้แล้วมันจะส่งพวกเขากลับไปยังเว็บไซต์บุคคลที่สาม

http://sub.yourdomain.com/wp-login.php?redirect_to=http%3A%2F%2Fwww.third-party-domain.com

รีโมตล็อกอิน

หากคุณต้องการเข้าสู่ระบบผู้ใช้ WordPress จากเว็บไซต์บุคคลที่สามคุณสามารถใช้ฟังก์ชั่น WP ง่าย ๆ ที่มีอยู่ในเว็บไซต์นี้: http://kuttler.eu/code/log-in-a-wordpress-user-programmatically/

คุณจะต้องใช้ความลับร่วมกันและสร้างเวลาตามแฮชลับนั้นเพื่อให้สิ่งต่าง ๆ ปลอดภัย โดยทั่วไปนี่คือสิ่งที่ดูเหมือนว่า:

บุคคลที่สามส่งคำขอพร้อมเวลาประทับและโทเค็นที่สร้างขึ้นโดยความลับที่แชร์:

$shared_secret = 'foobar'; //do not send this to the API endpoint
$timestamp = time();
$token = md5($shared_secret.$time_stamp);

การติดตั้ง WordPress ได้รับคำขอ:

$shared_secret = 'foobar';
$timestamp = esc_attr($_GET['timestamp']);

if((time() - $timestamp) > 30) # Threshold is 30 seconds
    //do something here - TOKEN expired!

$token = md5($share_secret.$timestamp);
$token_to_check = esc_attr($_GET);

if($token == $token_to_check)
    //authenticated!

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

@anu: ถูกต้อง
emersonthis

@Brian: ฉันสนใจที่จะเปลี่ยนไปใช้การติดตั้งแบบหลายไซต์ แต่ฉันไม่เข้าใจจุดที่คุณทำเกี่ยวกับคุกกี้ สิ่งที่ต้องเกิดขึ้นคือซอฟต์แวร์ของ บริษัท อื่นต้องยืนยันว่าผู้ใช้นั้นเป็นหนึ่งในผู้ใช้ของฉัน ซอฟต์แวร์เป็นแบบพอเพียงและสามารถให้คุกกี้ของตัวเองหรืออะไรก็ตาม
emersonthis

@ Emerson ฉันเห็นแล้ว ขอโทษสำหรับความสับสน. คุณสามารถใช้แนวคิดจุดปลายที่ฉันสร้างและใช้โทเค็นที่ใช้ร่วมกันในเมตาผู้ใช้สำหรับการตรวจสอบความถูกต้อง ส่งคืนการตอบกลับ JSON ไปยังบุคคลที่สามหากมีผู้ใช้อยู่
Brian Fegter

1
ทางออกที่ดีมาก อาจมีปัญหาหากติดตั้งแอปพลิเคชันบนเซิร์ฟเวอร์ที่แตกต่างกันและด้วยเหตุผลบางอย่างเวลาของแต่ละเครื่องจะแตกต่างกัน ฉันอยากจะแนะนำให้ใช้counterแทนtime()และผ่านมันไปพร้อมกับคำขอ ทั้งสองฝ่ายผ่านการนับครั้งสุดท้ายและเมื่อ api ได้รับการร้องขอด้วยตัวนับใหม่มันจะตรวจสอบว่าตัวใหม่นั้นดีกว่าอันสุดท้าย ด้วยวิธีนี้ความล่าช้าไม่สามารถทำอันตรายใด ๆ
guyaloni
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.