• 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 หรือที่รู้จักกันว่า URL ตอบกลับ เป็นส่วนประกอบด้านความปลอดภัยที่สำคัญในกระบวนการยืนยันตัวตนของ OIDC มันระบุ URL ที่ผู้ใช้จะถูกส่งไปเมื่อทำการลงชื่อเข้าใช้ผ่านผู้ให้บริการ OIDC สำเร็จสำคัญกว่านั้นคือ มันเป็นที่ที่แอปพลิเคชันของคุณได้รับโค้ดการอนุญาตที่จำเป็นสำหรับการรับโทเค็น

ดูเพิ่มเติมที่ Redirect URI wiki สำหรับรายละเอียดเพิ่มเติม

Authorization Code Flow คืออะไร?

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

ดูเพิ่มเติมที่ Authorization Code Flow wiki สำหรับรายละเอียดเพิ่มเติม

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 กับลิสต์ของ URIs ที่ลงทะเบียนล่วงหน้า หากมีความไม่ตรงกัน จะได้รับผลลัพธ์เป็นข้อผิดพลาด invalid_redirect_uri ซึ่งจะเพิ่มความปลอดภัยโดยการป้องกันไม่ให้จุดสิ้นสุดที่ไม่ได้รับอนุญาตได้รับโทเค็น

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

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

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

หากเป็นแอปบนมือถือ native ปกติ redirect URI จะเริ่มต้นด้วย custom scheme เช่น com.company://myapp/callback

แนวปฏิบัติที่ดีที่สุดอื่น ๆ รวมถึง:

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

การจัดการ callback ในการลงชื่อเข้าใช้

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

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

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

    • client_id: 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" component ใน React โดยใช้ Logto official React SDK:

คำแนะนำการรวม SDK สามารถพบได้ใน Logto quick-starts docs.

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

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