Grant Type คืออะไร?
บริบทการอนุญาต OAuth 2.0
ภายในเฟรมเวิร์กของ OAuth 2.0 Authorization คำว่า "Grant Type" หมายถึงวิธีการที่แอปพลิเคชันใช้เพื่อขอ access token โดยพื้นฐานแล้ว grant type ระบุประเภทของ authorization flow ที่แอปพลิเคชันจะใช้เพื่อเข้าถึงข้อมูลผู้ใช้
Grant Types ต่าง ๆ ใน OAuth 2.0
OAuth 2.0 กำหนด grant types หลายแบบ ปรับแต่งสำหรับสถานการณ์แอปพลิเคชันที่แตกต่างกัน:
- Authorization Code:
- เหมาะที่สุดสำหรับ: แอปพลิเคชันที่สามารถรักษาความลับของ client secret ได้อย่างปลอดภัย มักเป็นแอปพลิเคชันฝั่งเซิร์ฟเวอร์
- Flow: ผู้ใช้จะถูกเปลี่ยนเส้นทางไปยังเซิร์ฟเวอร์ยืนยันตัวตนก่อน เมื่อยืนยันตัวตนสำเร็จ จะถูกเปลี่ยนเส้นทางกลับมายังแอปพลิเคชันพร้อม authorization code แอปพลิเคชันจะแลกเปลี่ยนโค้ดนี้เป็น access token
- Implicit:
- เหมาะที่สุดสำหรับ: แอปพลิเคชันที่ใช้ user-agent เช่น single-page apps
- Flow: คล้ายกับ Authorization Code flow แต่ access token จะถูกส่งมอบโดยตรงโดยไม่มี intermediate code ถือว่าปลอดภัยน้อยกว่าวิธี Authorization Code
- Password (Resource Owner Password Credentials):
- เหมาะที่สุดสำหรับ: แอปพลิเคชันที่เชื่อถือได้สูง มักเป็นขององค์กรเดียวกับ resource server
- Flow: ผู้ใช้ป้อนชื่อผู้ใช้และรหัสผ่านโดยตรงในแอปพลิเคชัน แอปพลิเคชันจะใช้ข้อมูลรับรองเหล่านี้เพื่อขอ access token flow นี้มักไม่แนะนำเว้นแต่ไคลเอนต์จะเชื่อถือได้สูง
- Client Credentials:
- เหมาะที่สุดสำหรับ: บริการหรือแอปพลิเคชันที่ต้องเข้าถึงทรัพยากรของตนเอง ไม่ใช่ของผู้ใช้
- Flow: แอปพลิเคชันยืนยันตัวตนด้วยข้อมูลรับรองของตนเอง (เช่น client ID และ secret) และได้รับ access token เป็นการตอบแทน
- Device Code (สำหรับอุปกรณ์ที่ไม่มีความสามารถเบราว์เซอร์เต็มรูปแบบ):
- เหมาะที่สุดสำหรับ: อุปกรณ์เช่น smart TVs, เกมคอนโซล หรือเครื่องพิมพ์
- Flow: อุปกรณ์สื่อสารกับ authorization server เพื่อขอ device code และ user code ผู้ใช้ป้อน user code บนอุปกรณ์อื่น (เช่น สมาร์ทโฟน) หลังจากตรวจสอบแล้ว อุปกรณ์จะได้รับ access token
- Refresh Token:
- การใช้งาน: ไม่ใช่ flow แบบเดี่ยว แต่เสริม grant types อื่น เมื่อ access token หมดอายุ refresh token ช่วยให้แอปพลิเคชันขอ token ใหม่โดยไม่ต้องให้ผู้ใช้ลงชื่อเข้าใช้อีกครั้ง
ทำไม Grant Types จึงสำคัญ?
Grant types ให้ความยืดหยุ่นสำหรับบริบทแอปพลิเคชันที่แตกต่างกัน แต่ละแบบรับประกันว่าการขอ access token มีความปลอดภัยมากที่สุดเท่าที่เป็นไปได้ตามข้อจำกัดของแอปพลิเคชัน การเลือก grant type ส่งผลต่อปฏิสัมพันธ์ระหว่างไคลเอนต์ ผู้ใช้ และ authorization server ทำให้การเลือกที่ถูกต้องมีความสำคัญทั้งในด้านการใช้งานและความปลอดภัย