• redirect uri
  • callback
  • authorization code
  • code flow
  • oidc
  • pkce

ทำความเข้าใจเกี่ยวกับ Redirect URI และ Authorization Code Flow ใน OpenID Connect (OIDC)

มาลองดูที่ redirect URI อย่างละเอียดเนื่องจากเป็นส่วนประกอบความปลอดภัยที่สำคัญในกระบวนการรับรองความถูกต้องของ OIDC

Charles
Charles
Developer

Redirect URI คืออะไร?

Redirect URI หรือที่เรียกว่า Reply URL เป็นส่วนประกอบความปลอดภัยที่สำคัญในกระบวนการรับรองความถูกต้องของ OIDC มันระบุ URL ที่ผู้ใช้จะถูกส่งไปหลังจากลงชื่อเข้าใช้งานสำเร็จผ่านผู้ให้บริการ OIDC ที่สำคัญกว่านั้นคือที่ที่แอปพลิเคชันของคุณได้รับโค้ดอนุญาตที่จำเป็นในการรับโทเค็น

ดูรายละเอียดเพิ่มเติมที่ Auth Wiki > Redirect URI

Authorization Code Flow คืออะไร?

Authorization Code Flow (ที่กำหนดไว้ใน OAuth 2.0 RFC 6749, section 4.1) เป็นวิธีการรับรองความถูกต้องพื้นฐานใน OIDC มันเกี่ยวข้องกับการแลกเปลี่ยนโค้ดอนุญาตเพื่อรับโทเค็นการเข้าถึงและสามารถเลือกรับโทเค็นการรีเฟรชได้ การไหลนี้เหมาะสมสำหรับแอปพลิเคชันที่สามารถรักษาความลับของไคลเอนต์ได้อย่างปลอดภัย เช่น แอปพลิเคชันเว็บที่รันในฝั่งเซิร์ฟเวอร์

ดูรายละเอียดเพิ่มเติมที่ Auth Wiki > Authorization Code Flow

Redirect URI ทำงานอย่างไรใน Authorization Code Flow?

ใน Authorization Code Flow, Redirect URI เป็นปลายทางที่ผู้ให้บริการ OIDC ส่งโค้ดอนุญาตหลังจากที่ผู้ใช้รับรองความถูกต้องสำเร็จ มันต้องได้รับการลงทะเบียนล่วงหน้ากับผู้ให้บริการ OIDC เพื่อรับรองความปลอดภัยและป้องกันการเปลี่ยนเส้นทางที่ไม่ได้รับอนุญาต

นี่คือวิธีที่คุณสามารถลงทะเบียน Redirect URI ใน Logto Console: redirect-uri

เมื่อเริ่มการลงชื่อเข้าใช้:

  1. คำขออนุญาต: แอปพลิเคชันของคุณนำผู้ใช้ไปยังจุดสิ้นสุดการอนุญาตของผู้ให้บริการ OIDC รวมถึงพารามิเตอร์เช่น client_id, response_type, scope และ redirect_uri.
  2. การรับรองความถูกต้องของผู้ใช้: ผู้ใช้เข้าสู่ระบบกับผู้ให้บริการ OIDC
  3. การส่งมอบโค้ดอนุญาต: เมื่อรับรองความถูกต้องสำเร็จ ผู้ให้บริการ OIDC จะส่งผู้ใช้ไปยัง redirect_uri ที่ระบุรวมถึงโค้ดอนุญาตเป็นพารามิเตอร์การค้นหา

ผู้ให้บริการ OIDC ตรวจสอบ redirect_uri กับรายการ URI ที่ลงทะเบียนล่วงหน้า หากมีความไม่ตรงกันจะส่งคืนข้อผิดพลาด invalid_redirect_uri เพื่อเพิ่มความปลอดภัยโดยการป้องกันปลายทางที่ไม่ได้รับอนุญาตในการรับโทเค็น

แนวทางปฏิบัติที่ดีที่สุดสำหรับ Redirect URIs

ในการใช้งานชีวิตจริง แนวทางปฏิบัติที่ดีทั่วไปคือการสร้างหน้าดาวน์ที่เรียกว่า "Callback" และเชื่อมโยงกับเส้นทางหรือการเชื่อมโยงลึกที่อนุญาตให้เข้าถึงโดยตรงจากภายนอก ลิงก์นี้ควรถูกใช้เป็น redirect URI

สมมติว่าคุณมีแอปเว็บหน้าหนึ่งที่ทำงานบน https://my-app.com ปกติแล้ว redirect URI จะถูกประกาศเป็น https://my-app.com/callback

หรือถ้าเป็นแอปพลิเคชันมือถือแบบเนทีฟ redirect URI มักจะเริ่มต้นด้วยสคีมที่กำหนดเอง เช่น com.company://myapp/callback

แนวทางปฏิบัติที่ดีที่สุดอื่นๆ ได้แก่:

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

จัดการการเรียกกลับการลงชื่อเข้าใช้

เพื่อจัดการโค้ดอนุญาตที่ส่งกลับไปยัง redirect_uri ของคุณ ให้ทำตามขั้นตอนเหล่านี้:

  1. สกัดโค้ดอนุญาต: รับพารามิเตอร์โค้ดจากสตริงค้นหาของ redirect URI

  2. แลกเปลี่ยนโค้ดอนุญาตเพื่อรับโทเค็น: ประกอบคำขอ POST ไปยังจุดสิ้นสุดโทเค็นของผู้ให้บริการ OIDC รวมถึง:

    • client_id: รหัสแอปพลิเคชันของคุณในผู้ให้บริการ OIDC
    • code: โค้ดอนุญาตที่ได้รับจาก redirect URI
    • code_verifier: สตริงสุ่มที่สร้างจากไคลเอนต์
    • redirect_uri: URI เดียวกันที่ใช้ในคำขออนุญาต
    • grant_type: ประเภทของการให้สิทธิ์ โดยปกติคือ authorization_code

ตัวอย่างคำขอแลกเปลี่ยนโทเค็นใน JavaScript

ทำให้กระบวนการแลกเปลี่ยนโค้ดใน Logto ง่ายขึ้นโดยใช้ Logto SDKs

Logto SDKs เป็นชุดพัฒนาที่เขียนในภาษาการเขียนโปรแกรมหรือเฟรมเวิร์กที่เฉพาะเจาะจง เช่น Logto React SDK, Next.js SDK และ Swift SDK การใช้ SDK สามารถทำให้สิ่งต่างๆ ง่ายขึ้นได้ด้วยการเรียกเพียงหนึ่งหรือสองฟังก์ชัน

นี่คือตัวอย่างคอมโพเนนต์ "Callback" ใน React ที่ใช้ Logto React SDK อย่างเป็นทางการ:

สามารถค้นหาคู่มือการผนวกรวม SDK ได้ที่ Logto Docs > Quick-starts

สรุป: ทำไมการเข้าใจ Redirect URIs ใน OIDC จึงสำคัญ

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