วิธีตั้งค่าและใช้การตรวจสอบสิทธิ์ OAuth โดยใช้ WP REST API

เผยแพร่แล้ว: 2016-11-30
ตั้งค่า wordpress rest api
ติดตาม @Cloudways

เมื่อพูดถึง WordPress REST API OAuth เป็นผู้ให้บริการจัดการการรับรองความถูกต้องทั่วไป

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

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

  • การตรวจสอบสิทธิ์ OAuth แบบดั้งเดิมกับ OAuth
  • เวิร์กโฟลว์การตรวจสอบสิทธิ์ OAuth
  • การติดตั้งการตรวจสอบสิทธิ์ OAuth
  • การประเมินความพร้อมใช้งานของ OAuth API
  • การสร้างและจัดการแอปพลิเคชัน
  • ไคลเอ็นต์ CLI เพื่อสร้างข้อมูลรับรอง OAuth
  • ไคลเอนต์ HTTP เพื่อสร้างข้อมูลรับรอง OAuth
  • การรับหนังสือรับรองชั่วคราว
  • การให้สิทธิ์ผู้ใช้
  • การแลกเปลี่ยนโทเค็น
  • การส่งคำขอตรวจสอบสิทธิ์การทดสอบ

การตรวจสอบสิทธิ์ OAuth แบบดั้งเดิมกับ OAuth

เพื่อให้เข้าใจถึงความสำคัญของการตรวจสอบสิทธิ์ OAuth จำเป็นต้องเข้าใจรูปแบบการตรวจสอบสิทธิ์แบบเดิมและแบบ OAuth

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

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

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

เนื่องจากมีสามเอนทิตี กระบวนการนี้จึงเรียกว่าการตรวจสอบสิทธิ์แบบสามขา อย่างไรก็ตาม ในกรณีที่ไคลเอ็นต์และผู้ใช้เป็นเอนทิตีเดียวกัน กระบวนการรับรองความถูกต้องจะกลายเป็นการตรวจสอบสิทธิ์แบบสองทาง

เวิร์กโฟลว์การตรวจสอบสิทธิ์ OAuth

เวิร์กโฟลว์

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

ลูกค้าสร้างคำขอที่ลงนามสำหรับโทเค็นคำขอ คำขอนี้เรียกอีกอย่างว่าหนังสือรับรองชั่วคราว คำขอจะถูกส่งไปยัง URI ปลายทางที่เกี่ยวข้อง คำขอนี้ประกอบด้วยพารามิเตอร์ที่สำคัญหลายประการ:

  • oauth_consumer_key : คีย์นี้ระบุแอปพลิเคชันที่สร้างคำขอ
  • oauth_timestamp : เซิร์ฟเวอร์ใช้การประทับเวลานี้เพื่อเพิ่มประสิทธิภาพการจัดเก็บ nonces
  • oauth_nonce : นี่คือแอปพลิเคชันที่สร้างโทเค็นเฉพาะสำหรับแต่ละคำขอ
  • oauth_signature : ส่วนสำคัญของคำขอ API คือแฮชของส่วนประกอบทั้งหมดของคำขอและค่า OAuth บางค่า
  • oauth_signature_method : ปลั๊กอิน OAuth เสนอวิธีการลายเซ็นเดียว: HMAC-SHA1
  • oath_callback : URL ที่ผู้ใช้ถูกเปลี่ยนเส้นทางหลังจากการอนุญาต คำขอได้รับการตรวจสอบและออกโทเค็นคำขอพร้อมพารามิเตอร์ต่อไปนี้
  • oauth_token : นี่คือโทเค็นของแอปพลิเคชันที่ถูกถอดออกจากการตอบกลับของ Authorization Server โทเค็นนี้จะถูกส่งไปยังเซิร์ฟเวอร์ API
  • oauth_token_secret : คล้ายกับรหัสผ่านของผู้ใช้ คำขอจะได้รับอนุญาตจากลูกค้า สำหรับสิ่งนี้ URI คำขอจะถูกสร้างขึ้นและเพิ่ม oauth_token ไปยัง URI ปลายทางการอนุญาตของเซิร์ฟเวอร์ ผู้ใช้อนุญาตให้ส่งคำขอนี้โดยระบุข้อมูลประจำตัวที่เหมาะสม

ในกรณีที่ oauth_callback URI พร้อมใช้งานในขั้นตอนแรก เซิร์ฟเวอร์จะเปลี่ยนเส้นทางไปยัง URI โดยเพิ่มพารามิเตอร์ต่อไปนี้ในสตริงการสืบค้น:

  • oauth_token : มีโทเค็นอยู่แล้ว
  • oauth_verifier : ตรวจสอบตัวตนของเจ้าของทรัพยากรให้กับลูกค้า

หากไม่ได้ระบุ oauth_callback URI ในขั้นตอนแรก เซิร์ฟเวอร์จะส่งค่าของ oauth_verifier เพื่อให้เจ้าของทรัพยากรสามารถแจ้งให้ไคลเอ็นต์ทราบได้ด้วยตนเอง

หลังจากได้รับ oauth_verfier แล้ว ไคลเอ็นต์จะขอข้อมูลรับรองโทเค็นจากเซิร์ฟเวอร์ การดำเนินการนี้อยู่ในรูปแบบคำขอไปยัง URI ปลายทางคำขอโทเค็น คำขอนี้มีพารามิเตอร์ต่อไปนี้:

  • oauth_token
  • oauth_verfier
  • oauth_consumer_key
  • oauth_signature
  • oauth_signature_method
  • oauth_nonce
  • oauth_version

การติดตั้งการตรวจสอบสิทธิ์ OAuth

ในบริบทของ WordPress การรับรองความถูกต้อง OAuth จะดำเนินการโดยการติดตั้ง API การตรวจสอบสิทธิ์ OAuth สำหรับ WordPress อิงตามข้อกำหนด OAuth 1.0a และขยายข้อกำหนดเหล่านี้ด้วยพารามิเตอร์เพิ่มเติม wp_scope พารามิเตอร์นี้ถูกส่งไปยังจุดสิ้นสุดการ ร้องขอข้อมูลประจำตัวชั่วคราว

ปลั๊กอินมีอยู่ใน Github จากทีม WP REST API ในขณะนี้ รองรับเวอร์ชัน 4.4 และใหม่กว่า

ฉันจะเริ่มกระบวนการโคลนปลั๊กอินโดยย้ายไปที่ไดเร็กทอรี /wp-content/plugins/ :

 โคลน git https://github.com/WP-API/OAuth1.git 

การติดตั้ง Git

หลังจากดาวน์โหลดเสร็จแล้ว ให้เปิดใช้งานปลั๊กอินผ่าน WordPress CLI:

 ปลั๊กอิน wp เปิดใช้งาน OAuth1

หากคุณไม่ต้องการใช้ WordPress CLI คุณสามารถไปที่ WordPress Admin >> Plugins และเปิดใช้งานปลั๊กอินจากเมนู หรือคุณสามารถเปิดใช้งานได้โดยไปที่เบราว์เซอร์ของคุณไปยังส่วนปลั๊กอินผู้ดูแลระบบ WordPress หากคุณไม่ต้องการใช้ WP CLI

การประเมินความพร้อมใช้งานของ OAuth API

ก่อนที่ฉันจะเริ่มต้นการจับมือ OAuth ฉันจะตรวจสอบก่อนว่า API นั้นเปิดใช้งานบนเซิร์ฟเวอร์หรือไม่ ทำได้โดยส่งคำขอ GET ง่ายๆ ไปที่ /wp-json/ endpoint แล้ววิเคราะห์การตอบสนองที่ส่งโดยเซิร์ฟเวอร์

 รับ http://Server-Dev/wp-json/

สิ่งนี้จะส่งคืนการตอบกลับ JSON ดังนี้:

ด้วยการรับรองความถูกต้อง

จุดสนใจของฉันที่นี่คือค่า oauth1 ในค่าคุณสมบัติการ รับรองความถูกต้อง วัตถุนี้มีคุณสมบัติดังต่อไปนี้ที่กำหนดไว้:

  • คำขอ : จุดสิ้นสุดคำขอข้อมูลประจำตัวชั่วคราว
  • อนุญาต : ปลายทางการให้สิทธิ์เจ้าของทรัพยากร
  • การเข้าถึง : ปลายทางคำขอโทเค็น
  • เวอร์ชัน : เวอร์ชันของ OAuth ที่ใช้อยู่

หากไม่ได้เปิดใช้งาน OAuth API สำหรับไซต์ การตอบสนองของเซิร์ฟเวอร์จะมีค่าคุณสมบัติการ อนุญาตที่ ว่างเปล่า

โดยไม่ต้องรับรองความถูกต้อง

การสร้างและจัดการแอปพลิเคชัน

ขั้นตอนแรกคือตรวจสอบให้แน่ใจว่าติดตั้งและเปิดใช้งานปลั๊กอิน OAuth1.0 อย่างถูกต้อง

ต่อไป ฉันสามารถสร้างและจัดการแอปพลิเคชันได้โดยไปที่ WordPress Admin >> Users >> Applications

ใช้แบบฟอร์มใบสมัคร

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

  1. ชื่อไคลเอนต์: ชื่อของลูกค้าที่ปรากฏในส่วน แอปพลิเคชันที่ได้รับอนุญาต และระหว่างกระบวนการให้สิทธิ์
  2. คำอธิบาย : คำอธิบายเพิ่มเติมของลูกค้า
  3. URL การโทรกลับ : URL การโทรกลับถูกใช้เมื่อสร้างข้อมูลประจำตัวชั่วคราว

เมื่อสร้างขึ้นโดยคลิกที่ปุ่มบันทึกลูกค้าพารามิเตอร์ที่สำคัญไคลเอ็นต์และความลับของไคลเอนต์จะปรากฏที่ด้านล่างของหน้าสำหรับลูกค้านี้โดยเฉพาะ

คำสาบาน

ตอนนี้ฉันจะโคลนที่เก็บข้อมูลบนไคลเอนต์โดยใช้คำสั่งต่อไปนี้:

 โคลน git https://github.com/WP-API/client-cli 

ลูกค้า CLI

ตอนนี้ไปที่ไดเร็กทอรีโคลนและติดตั้งการพึ่งพาแพ็คเกจโดยใช้ Composer:

 cd ลูกค้า-cli
การติดตั้งนักแต่งเพลง

หากทุกอย่างเป็นไปด้วยดี บรรทัดคำสั่งควรแสดงสิ่งที่คล้ายกับต่อไปนี้:

การติดตั้งนักแต่งเพลง

ไคลเอ็นต์ CLI เพื่อสร้างข้อมูลรับรอง OAuth

ในการเริ่มต้นกระบวนการให้สิทธิ์ OAuth ฉันจะได้รับพารามิเตอร์ต่อไปนี้จากเซิร์ฟเวอร์ก่อน:

  • oauth_consumer_key
  • oauth_consumer_secret

สิ่งนี้จะถูกสร้างขึ้นผ่านเทอร์มินัลและรันคำสั่ง WordPress CLI ต่อไปนี้:

 wp oauth1 เพิ่ม

กุญแจ และ ความลับ คือ oauth_consumer_key และ oauth_consumer_secret ตามลำดับ

ตอนนี้ฉันต้องเชื่อมโยงไคลเอนต์กับไซต์ WordPress บนไคลเอนต์ นำทางไปยังไดเร็กทอรี client-cli (โคลนก่อนหน้านี้) และรันคำสั่งต่อไปนี้:

 wp --require=client.php api oauth1 เชื่อมต่อ http://Server-Dev/ --key=<รหัสของคุณที่นี่> --secret=<ความลับของคุณที่นี่>

แทนที่ URL คีย์และข้อมูลลับในคำสั่งด้านบน ผลลัพธ์ควรเป็นดังนี้:

 wp --require=client.php api oauth1 เชื่อมต่อ http://your-server/wordpress-api/ --key=<รหัสของคุณ> --secret=<รหัสลับของคุณ>
เปิดในเบราว์เซอร์ของคุณ: http://your-server/wordpress-api/oauth1/authorize?oauth_token=<your-token>
ป้อนรหัสยืนยัน:

ไปที่ URL ที่กำหนดโดยเซิร์ฟเวอร์และรับรองความถูกต้องโดยคลิกปุ่ม อนุญาต :

เชื่อมต่อ WP REST API

คุณจะได้รับโทเค็นการยืนยัน (หรือ oauth_verifier) ​​ในหน้าจอถัดไป:

อนุมัติโทเค็น

คัดลอกตัวตรวจสอบและวางลงในเทอร์มินัล คุณจะได้รับ Key และ Secret ซึ่งโดยทั่วไปแล้วจะเป็น oauth_token และ oauth_token_secret ตามลำดับ:

ไคลเอนต์ HTTP เพื่อสร้างข้อมูลรับรอง OAuth

เนื่องจากปลั๊กอินเซิร์ฟเวอร์ OAuth 1.0a เป็นไปตามโฟลว์สามขามาตรฐาน การสร้างข้อมูลรับรอง OAuth จึงมีขั้นตอนต่อไปนี้:

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

การรับหนังสือรับรองชั่วคราว

ฉันจะส่งคำขอ POST ไปที่ /oauth1/request endpoint เพื่อรับข้อมูลประจำตัวชั่วคราว โปรดทราบว่าปลายทางนี้ควรจะสามารถค้นพบได้โดยอัตโนมัติ เนื่องจากเซิร์ฟเวอร์อาจเข้ามาแทนที่เส้นทางด้วยตัวเอง

คำขอ POST ควรรวมและพารามิเตอร์ oauth_consumer_secret ที่ได้รับเมื่อลงทะเบียนผู้บริโภคสำหรับแอปพลิเคชัน คำขออาจรวมพารามิเตอร์ oauth_callback และ URL การเรียกกลับนี้ควรตรงกับแบบแผน โฮสต์ พอร์ต และเส้นทางของ callback URL ซึ่งให้ไว้เมื่อลงทะเบียนแอปพลิเคชัน

นอกจากนี้ในการ oauth_consumer_key และ oauth_consumer_secret พารามิเตอร์คำขอยังควรรวมถึง oauth_signature และ oauth_signature_method พารามิเตอร์

เมื่อใช้บุรุษไปรษณีย์ oauth_signature จะถูกสร้างขึ้นโดยอัตโนมัติ ฉันต้องพูดถึงพารามิเตอร์ oauth_signature_method เท่านั้น ในขณะนี้ ปลั๊กอินเซิร์ฟเวอร์ OAuth รองรับเฉพาะวิธีการลงนาม HMAC-SHA1

ตอนนี้ฉันจะกำหนดค่าบุรุษไปรษณีย์ให้ส่งคำขอ POST ไปยังปลายทางข้อมูลประจำตัวโทเค็นชั่วคราว ถัดไป ในแท็บการ ให้สิทธิ์ ให้เลือกตัวเลือก OAuth 1.0 จากดรอปดาวน์ กรอกข้อมูลในฟิลด์ Consumer Key และ Consumer Secret ด้วยค่าที่ระบุโดยผู้ใช้บริการ สุดท้าย ให้ตรวจสอบว่าตัวเลือก Signature Method ถูกตั้งค่าเป็น HMAC-SHA1

การให้สิทธิ์ผู้ใช้

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

 http://server-dev/oauth1/authorize?oauth_token=<token_here>&oauth_token_secret=<secret_here> 

อนุญาตการเชื่อมต่อ

ให้สิทธิ์แอปพลิเคชันโดยคลิกปุ่ม อนุญาต หน้าจอถัดไปจะแสดงโทเค็นการยืนยัน โทเค็นนี้จะทำหน้าที่เป็นโทเค็น oauth_verifier ในขั้นตอนถัดไป

เมื่อผู้ใช้อนุญาตไคลเอ็นต์แล้ว แอปพลิเคชันจะปรากฏใต้ส่วน แอปพลิเคชันที่ได้รับอนุญาต บนหน้า ผู้ใช้ > โปรไฟล์ของคุณ

การแลกเปลี่ยนโทเค็น

โดยใช้ตัวเลือก OAuth 1.0 อีกครั้งในแท็บการ อนุญาต ให้กรอกข้อมูลในฟิลด์สำหรับรหัส ผู้บริโภค และรหัส ลับของผู้บริโภค ด้วยค่าที่ผู้ใช้บริการให้มา ในฟิลด์สำหรับ Token และ Token ลับใส่ค่า oauth_token และ oauth_token_secret พารามิเตอร์ (ข้อมูลประจำตัวชั่วคราว)

เนื่องจากฉันสามารถส่งพารามิเตอร์ใน URL เป็นพารามิเตอร์การค้นหาได้ ให้ต่อท้ายพารามิเตอร์ oauth_verifier กับ URL ดังนี้:

 http://server-dev/oauth1/access?oauth_verifier=<oauth_verifier_value>

เมื่อตั้งค่าพารามิเตอร์ทั้งหมดเรียบร้อยแล้ว ให้ส่งคำขอโดยคลิกปุ่ม ส่ง หากทุกอย่างเป็นไปด้วยดี เซิร์ฟเวอร์จะส่งคืนรหัสสถานะ 200 – OK พร้อมกับเนื้อหาการตอบกลับที่มีพารามิเตอร์ oauth_token และ o auth_token_secret

 oauth_token=<oauth_token_value>&oauth_token_secret=<oauth_secret_value>

ณ จุดนี้ โทเค็นชั่วคราวที่ได้มาก่อนหน้านี้จะถูกยกเลิกและไม่สามารถใช้งานได้อีกต่อไป

พารามิเตอร์ oauth_token และ oauth_token_secret ใหม่คือข้อมูลประจำตัว OAuth ที่คุณสามารถใช้ได้ในไคลเอ็นต์สำหรับการสร้างคำขอที่ตรวจสอบสิทธิ์แล้ว

การส่งคำขอตรวจสอบสิทธิ์การทดสอบ

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

คุณจะต้องมีสิ่งต่อไปนี้ก่อนที่จะเริ่มต้น:

  • oauth_consumer_key
  • oauth_consumer_secret
  • oauth_token
  • oauth_token_secret

เลือก OAuth 1.0 จากดรอปดาวน์ใต้แท็บการ อนุญาต ในบุรุษไปรษณีย์

การอนุญาต

เมื่อคุณกรอกข้อมูลครบทุกช่องแล้ว ให้คลิกปุ่ม อัปเดตคำขอ ทำเครื่องหมาย ที่ ตัวเลือก Add params to header เพื่อส่งพารามิเตอร์ในส่วนหัวของคำขอแทนที่จะต่อท้ายสตริงการสืบค้น

หากคำขอสำเร็จ เซิร์ฟเวอร์จะส่งรหัสสถานะ 200 – ตกลง

ห่อ!

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