OAuth 1.0 กับ OAuth 2.0

May 01 2023
ความรู้เบื้องต้นเกี่ยวกับ OAuth พิจารณา OAuth เป็นกุญแจสำคัญในการนำรถไปจอด พนักงานรับรถใช้กุญแจนี้เพื่อนำรถไปหมุนชั่วคราวเท่านั้น ซึ่งแตกต่างจากกุญแจทั่วไปที่อนุญาตให้เจ้าของรถเข้าถึงได้อย่างไม่จำกัด พนักงานรับรถใช้กุญแจนี้เพื่อนำรถไปหมุนชั่วคราวเท่านั้นโดยไม่ต้องเข้าถึงช่องเก็บของหรือท้ายรถ

รู้เบื้องต้นเกี่ยวกับ OAuth

ลองพิจารณา OAuth เป็นรหัสนำรถไปจอด พนักงานรับรถใช้กุญแจนี้เพื่อนำรถไปหมุนชั่วคราวเท่านั้น ซึ่งแตกต่างจากกุญแจทั่วไปที่อนุญาตให้เจ้าของรถเข้าถึงได้อย่างไม่จำกัด พนักงานรับรถใช้กุญแจนี้เพื่อนำรถไปหมุนชั่วคราวเท่านั้นโดยไม่ต้องเข้าถึงช่องเก็บของหรือท้ายรถ OAuth เปิดใช้งานข้อมูลบัญชีของผู้ใช้ปลายทางเพื่อใช้โดยบริการของบุคคลที่สาม เช่น Amazon, Facebook, Google, Instagram, LinkedIn, Netflix, Paypal, Microsoft, Twitter เป็นต้น บริษัทเหล่านี้ทำงานร่วมกับแอปพลิเคชันของบุคคลที่สามจำนวนมากและมักจะอนุญาตให้ผู้ใช้ แบ่งปันข้อมูลประจำตัวของพวกเขาภายในแอพ เช่น เว็บไซต์ข่าว แพลตฟอร์มบล็อก วิดีโอเกมออนไลน์ ฯลฯ

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

เวอร์ชัน OAuth:

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

OAuth 1.0 มีผู้บริโภค ผู้ให้บริการ และผู้ใช้ และไม่ได้แยกบทบาทของเซิร์ฟเวอร์ทรัพยากรและเซิร์ฟเวอร์การอนุญาตอย่างชัดเจน

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

OAuth 1.0

⇒ ผู้ใช้ A ต้องการให้แอป 1 เข้าถึงข้อมูลในแอป 2

⇒ แอป 1 ส่งคำขอเชื่อมต่อกับแอป 2 ที่เริ่มต้นโดยผู้ใช้ A

⇒ แอป 2 ยอมรับคำขอจากแอป 1

⇒ แอป 2 ส่งโทเค็นชั่วคราวไปยังแอป 1

⇒ แอพ 1 เปลี่ยนเส้นทางผู้ใช้ A เพื่อเข้าสู่ระบบหรือสามารถใช้ URL ที่จัดรูปแบบล่วงหน้าได้เช่นกัน

⇒ หลังจากที่ผู้ใช้ A ตรวจสอบสิทธิ์ในแอป 1 สำเร็จ แอป 1 จะขออนุมัติสำหรับผู้ใช้ A เพื่อให้สิทธิ์แก่แอป 2 ในการเข้าถึงทรัพยากรของแอป 2

⇒ ในการอนุมัติ App 1 จะได้รับแจ้ง

⇒ แอป 1 ขอแอป 2 สำหรับโทเค็นการเข้าถึงใหม่โดยใช้โทเค็นชั่วคราว

⇒ แอป 2 อนุมัติคำขอและส่งโทเค็นการเข้าถึงใหม่

⇒ แอป 1 สามารถเข้าถึงข้อมูลของแอป 2 ได้แล้วโดยใช้โทเค็นการเข้าถึงใหม่

OAuth 1.0 โฟลว์

OAuth 2.0

⇒ ผู้ใช้ A ต้องการให้แอป 1 เข้าถึงข้อมูลในแอป 2

⇒ แอป 1 ขอเข้าถึงแอป 2 จากเซิร์ฟเวอร์การอนุญาต

⇒ ผู้ใช้ A รับรองความถูกต้องกับเซิร์ฟเวอร์การให้สิทธิ์ด้วยข้อมูลรับรองนี้ที่ได้รับในขั้นตอนด้านบน & ส่งคืนการให้สิทธิ์แก่แอป 1 เพื่อเข้าถึงข้อมูลในแอป 2

⇒ ตอนนี้ แอป 1 ขอโทเค็นการเข้าถึงจากเซิร์ฟเวอร์การให้สิทธิ์โดยใช้การให้สิทธิ์ที่ผู้ใช้ A ให้ไว้ในขั้นตอนที่ 3 ด้านบน

⇒ เซิร์ฟเวอร์การให้สิทธิ์ตรวจสอบคำขอและส่งโทเค็นการเข้าถึงไปยังแอป 1

⇒ แอป 1 สามารถเข้าถึงข้อมูลในแอป 1 ด้วยโทเค็นการเข้าถึงได้แล้ว

โฟลว์ OAuth 2.0

ทำไมต้อง OAuth 2.0 ?

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