Authorization Code Grant Type ใน OAuth 2.0
Authorization Code Grant Type เป็นหนึ่งใน grant types ที่ใช้กันมากที่สุดใน OAuth 2.0 ออกแบบมาโดยเฉพาะสำหรับแอปพลิเคชันที่สามารถเก็บรักษา client secret ได้อย่างปลอดภัย ทำให้เหมาะสำหรับแอปพลิเคชันฝั่งเซิร์ฟเวอร์
Authorization Code ทำงานอย่างไร?
- การเปลี่ยนเส้นทาง (Redirection):
- แอปพลิเคชันไคลเอนต์เปลี่ยนเส้นทางผู้ใช้ไปยัง authorization endpoint ของเซิร์ฟเวอร์ OAuth 2.0 การเปลี่ยนเส้นทางนี้โดยทั่วไปจะรวม query parameters เช่น
client_id,response_type(ตั้งค่าเป็น "code"),redirect_uri(ที่เซิร์ฟเวอร์จะส่งผู้ใช้กลับหลังจากอนุญาต/ปฏิเสธสิทธิ์) และscope(ระบุระดับการเข้าถึงที่แอปพลิเคชันร้องขอ)
- การยืนยันตัวตนผู้ใช้ (User Authentication):
- ผู้ใช้เข้าสู่ระบบเซิร์ฟเวอร์ authorization (หากยังไม่ได้เข้าสู่ระบบ) และตรวจสอบคำขอเข้าถึงจากแอปพลิเคชันไคลเอนต์
- การออก Authorization Code:
- หากผู้ใช้อนุญาตสิทธิ์ พวกเขาจะถูกเปลี่ยนเส้นทางกลับไปยังแอปพลิเคชันไคลเอนต์ผ่าน
redirect_uriที่ให้ไว้ก่อนหน้านี้ การเปลี่ยนเส้นทางยังรวม authorization code ใน URL ด้วย
- การแลกเปลี่ยน Token:
- แอปพลิเคชันไคลเอนต์แลกเปลี่ยน authorization code เป็น access token โดยส่ง POST request ไปยัง token endpoint ของเซิร์ฟเวอร์ authorization คำขอนี้ประกอบด้วย authorization code,
client_id,client_secret,redirect_uriและgrant_type(ตั้งค่าเป็น "authorization_code")
- การออก Access Token:
- หากเซิร์ฟเวอร์ authorization ตรวจสอบ code และ client credentials ที่ให้มาสำเร็จ จะส่งคืน access token (และเลือกที่จะส่ง refresh token ด้วย) ไปยังแอปพลิเคชันไคลเอนต์
- เข้าถึงทรัพยากรที่ป้องกัน:
- แอปพลิเคชันไคลเอนต์ใช้ access token ที่ได้รับเพื่อส่งคำขอไปยัง resource server (API) ในนามของผู้ใช้
วิธีกำหนดค่า Authorization Code?
- ลงทะเบียนแอปพลิเคชันของคุณ:
- ก่อนเริ่ม OAuth flow ให้ลงทะเบียนแอปพลิเคชันของคุณกับผู้ให้บริการ OAuth 2.0 เมื่อลงทะเบียนสำเร็จ คุณจะได้รับ
client_idและclient_secret
- ตั้งค่า Redirect URI:
- เมื่อลงทะเบียนแอปพลิเคชัน คุณมักจะถูกขอให้ระบุ
redirect_uriURI นี้คือที่ที่เซิร์ฟเวอร์ authorization จะส่งผู้ใช้หลังจากอนุญาต/ปฏิเสธการเข้าถึง ตรวจสอบให้แน่ใจว่า URI นี้ถูกต้องและปลอดภัย (โดยทั่วไปใช้ HTTPS)
- ดำเนินการ OAuth Flow:
- ใช้ library หรือ SDK ที่เข้ากันได้กับภาษาและ framework ของแอปพลิเคชันของคุณเพื่อลดความซับซ้อนของกระบวนการนี้
- เริ่ม flow โดยเปลี่ยนเส้นทางผู้ใช้ไปยัง authorization endpoint ของเซิร์ฟเวอร์ authorization พร้อม query parameters ที่จำเป็น
- สร้าง endpoint บนเซิร์ฟเวอร์ของคุณที่ตรงกับ
redirect_uriที่คุณลงทะเบียน endpoint นี้จะจัดการ authorization code ที่เข้ามา - แลกเปลี่ยน authorization code เป็น access token โดยส่ง POST request ไปยัง token endpoint
- รักษาความปลอดภัย Client Secret:
- อย่าเปิดเผย
client_secretในโค้ดฝั่งไคลเอนต์ ใช้เฉพาะฝั่งเซิร์ฟเวอร์เมื่อแลกเปลี่ยน authorization code เป็น access token เท่านั้น
- การจัดเก็บ Token:
- เมื่อคุณมี access token แล้ว ให้จัดเก็บอย่างปลอดภัย ขึ้นอยู่กับความต้องการของแอปพลิเคชัน อาจเป็นใน server memory, ฐานข้อมูล หรือ secure cookie ใช้ HTTPS เสมอเพื่อรับประกันการสื่อสารที่เข้ารหัส
- จัดการ Token หมดอายุ:
- Access tokens มักมีอายุสั้น หากคุณมี refresh token ให้ใช้เพื่อขอ access token ใหม่โดยไม่ต้องให้ผู้ใช้ยืนยันตัวตนอีกครั้ง
สรุปเกี่ยวกับ Authorization Code
Authorization Code Grant Type เป็นวิธีที่แข็งแกร่งและปลอดภัยสำหรับการขออนุญาตจากผู้ใช้ โดยเฉพาะสำหรับแอปพลิเคชันฝั่งเซิร์ฟเวอร์ ขั้นตอนเพิ่มเติมของการแลกเปลี่ยน authorization code เป็น access token ช่วยให้มั่นใจว่าหลีกเลี่ยงการเข้าถึงข้อมูลรับรองของผู้ใช้โดยตรง เมื่อดำเนินการ ให้ให้ความสำคัญกับความปลอดภัยเสมอ โดยใช้ HTTPS และจัดการ client secrets และ tokens อย่างปลอดภัย