ทำความเข้าใจโทเค็นการเข้าถึง โทเค็นรีเฟรช และโทเค็น ID ในโปรโตคอล OpenID Connect (OIDC)
โปรโตคอล OpenID Connect (OIDC) ได้กลายเป็นมาตรฐานที่ได้รับการยอมรับอย่างแพร่หลายสำหรับการจัดการอัตลักษณ์ แต่คุณเข้าใจจริงๆ ไหมว่าโทเค็นเหล่านี้มีบทบาทและคุณลักษณะอย่างไร?
OIDC, OAuth 2.0, และโทเค็น
OpenID Connect Protocol หรือที่รู้จักในชื่อ OIDC ได้กลายเป็นมาตรฐานที่ได้รับการยอมรับในการให้กรอบการทำงานพื้นฐานสำหรับการจัดการอัตลักษณ์ มันเป็นเลเยอร์การพิสูจน์ตัวตนที่สร้างขึ้นบนพื้นฐานของ โปรโตคอล OAuth 2.0 ที่เป็นที่รู้จัก ในขณะที่ OAuth 2.0 ถูกใช้เพียงเพื่อการอนุญาตการเข้าถึงทรัพยากร OIDC เป็นโปรโตคอลที่มาตรฐานและเสริมความแข็งแกร่งให้กับการพิสูจน์ตัวตนของลูกค้า ด้วยความช่วยเหลือของโทเค็น ID ที่แนะนำใหม่
เดี๋ยวก่อน... คุณอาจเคยได้ยินเกี่ยวกับโทเค็นการเข้าถึงและโทเค็นรีเฟรชในยุคของ OAuth แล้วตอนนี้มีแนวคิดใหม่ใน OIDC เข้ามา? คุณเข้าใจความแตกต่างระหว่างโทเค็นเหล่านี้จริงๆ ไหม?
โทเค็นการเข้าถึง โทเค็นรีเฟรช และโทเค็น ID ใน OIDC คืออะไร?
มาเริ่มด้วยสถานการณ์การใช้งานจริงกันเถอะ
ลองจินตนาการว่าคุณกำลังพัฒนาแอปพลิเคชันบนเซิร์ฟเวอร์ไคลเอนต์ในลักษณะดั้งเดิม และพวกเขาสื่อสารกันผ่าน RESTful APIs คุณต้องการให้ API ส่วนใหญ่ของคุณเป็นส่วนตัว อนุญาตให้เฉพาะไคลเอนต์ที่ผ่านการอนุมัติเข้าถึงได้ คุณจะต้องมีกลไกในการพิสูจน์ตัวตนของไคลเอนต์และอนุญาตการร้องขอ API ไปยังเซิร์ฟเวอร์ของคุณ
ในอุดมคติแล้ว RESTful APIs ของคุณควรเป็นแบบไม่ถาวร หมายความว่าเซิร์ฟเวอร์ไม่ควรเก็บข้อมูลเซสชันของไคลเอนต์ใด ๆ เมื่อการร้องขอที่ถูกต้องมา เซิร์ฟเวอร์ควรตอบกลับด้วยข้อมูลที่ร้องขอเท่านั้น นี่คือที่ที่โทเค็นจะมีประโยชน์ ดังนั้น โทเค็นประเภทใดที่คุณควรใช้ในกรณีเช่นนี้?
โทเค็นการเข้าถูกใช้เพื่อปกป้อง API ของคุณ
ใน OAuth 2.0 และ OIDC แต่ละ API ที่ได้รับการป้องกันจะถือว่าเป็นทรัพยากร โทเค็นการเข้าถึงคือโทเค็นที่ไคลเอนต์ส่งไปยังเซิร์ฟเวอร์เมื่อร้องขอโทรัพยากร API โดยทั่วไปผ่านทางส่วนหัวของการร้องขอและในรูปแบบ JWT
บนฝั่งเซิร์ฟเวอร์ เมื่อการร้องขอเข้ามา เซิร์ฟเวอร์จะต้องตรวจสอบเพียงว่าการร้องขอเจ้าเข้ามานำโทเค็นการเข้าถึงที่ถูกต้อง การตรวจสอบมักจะรวมถึงการถอดรหัสโทเค็น JWT การตรวจสอบลายเซ็นและเวลาในสิทธิ์ตลอดจนสิทธิ์เพื่อให้แน่ใจว่าไคลเอนต์มีสิทธิ์ที่จำเป็น
อย่างไรก็ตาม คุณอาจสงสัย: ถ้าแอปพลิเคชันไคลเอนต์ของฉันสามารถมีโทเค็นการเข้าถึงที่ถูกต้องหลังจากผ่านการล็อกอินสำเร็จ และใช้โทเค็นการเข้าถึงเพื่อร้องขอ API ไปยังเซิร์ฟเวอร์ นั่นยังไม่เพียงพอใช่ไหม? ทำไมฉันต้องการโทเค็นอื่น?
คำถามที่ดีเลยครับ และเรามาอธิบายกันเป็นขั้นตอน
ทำไมเราต้องใช้โทเค็นรีเฟรช?
แม้ว่าโทเค็นการเข้าถึงอาจตรงกับความต้องการขั้นต่ำในการทำให้ระบบทำงานได้อย่างไรก็ตาม เพื่อเหตุผลด้านความปลอดภัย ระยะเวลาการมีผลของโทเค็นการเข้าถึงมักจะสั้นมาก (โดยทั่วไปจะประมาณหนึ่งชั่วโมง) ดังนั้นลองจินตนาการดูว่าถ้าเรามีแค่โทเค็นการเข้าถึง ผู้ใช้สุดท้ายจะต้องพิสูจน์ตัวตนใหม่ทุกครั้งที่โทเค็นการเข้าถึงหมดอายุ สำหรับแอปพลิเคชันหน้าเดียว (SPA) และโดยเฉพาะอย่างยิ่งแอปพลิเคชันมือถือ การต้องล็อกอินใหม่บ่อยๆ เป็นประสบการณ์ที่ค่อนข้างไม่สะดวกสำหรับผู้ใช้ แม้ว่าเราจะพยายามปกป้องความปลอดภัยของผู้ใช้เพียงแค่เท่านั้น
ดังนั้นเราต้องหาความสมดุลระหว่างความปลอดภัยของโทเค็นและความสะดวกสบายของผู้ใช้ นั่นเป็นเหตุที่โทเค็นรีเฟรชถูกแนะนำมา
ทำไมโทเค็นรีเฟรชถึงสามารถมีอายุการใช้งานนานกว่า?
โทเค็นการเข้าถูกนำไปใช้ในการเข้าถึงทรัพยากร API ดังนั้นธรรมชาติที่อายุสั้นของมันจึงช่วยลดความเสี่ยงที่จะถูกแบ่งปันหรือถูกโจมตีได้ ในทางกลับกัน เนื่องจากโทเค็นรีเฟรชถูกใช้เพื่อแลกเปลี่ยนเป็นโทเค็นการเข้าถึงใหม่เท่านั้น โดยทั่วไปแล้วธรรมชาติที่ใช้ไม่บ่อยนักของมันลดความเสี่ยงของการถูกเปิดเผย และด้วยเหตุนี้การมีระยะเวลาการใช้งานที่ยาวขึ้นจึงถือว่ายอมรับได้สำหรับโทเค็นรีเฟรช
การรักษาความปลอดภัยของโทเค็นรีเฟรช
เนื่องจากโทเค็นรีเฟรชก็ถูกเก็บฝั่งไคลเอนต์ การรักษาให้ไม่ถูกรบกวนเป็นเรื่องท้าทายโดยเฉพาะบนไคลเอนต์สาธารณะเช่นแอปพลิเคชันหน้าเดียว (SPA) และแอปพลิเคชันมือถือ
ใน Logto โทเค็นรีเฟรชมีกลไกการหมุน อัตโนมัติ ที่เปิดโดยดีฟอลต์ ซึ่งหมายความว่าเซิร์ฟเวอร์อนุญาตจะออกโทเค็นรีเฟรชใหม่เมื่อมันพบเกณฑ์:
- แอปพลิเคชันหน้าเดียว: ถ ูกระบุให้เป็นไคลเอนต์ที่ไม่ได้ถูกกำหนดขอบเขตผู้ส่ง แอปเหล่านี้บังคับให้มีการหมุนโทเค็นรีเฟรช ไม่สามารถระบุเวลาใช้งานของโทเค็นรีเฟรชได้
- แอปพลิเคชันธรรมชาติและแอปพลิเคชันเว็บแบบดั้งเดิม: การหมุนโทเค็นรีเฟรชถูกเปิดโดยอัตโนมัติและจะต่ออายุเมื่อถึง 70% ของอายุเวลา เรียนรู้เพิ่มเติม
แม้ว่าคุณยังมียังสามารถปิดการหมุนโทเค็นรีเฟรชได้บนหน้าแสดงข้อมูลแอปพลิเคชันในแอดมินคอนโซล แต่ก็แนะนำให้รักษามาตรการป้องกันไว้
โทเค็น ID คืออะไรและทำไมมันจึงสำคัญ?
โทเค็น ID เป็นคุณสมบัติเฉพาะของ OIDC ที่ให้ข้อมูลอัตลักษณ์เกี่ยวกับผู้ที่ถูกพิสูจน์ตัวตน
ในขณะที่โทเค็นการเข้าถูกใช้ในการเข้าถึงทรัพยากรที่ได้รับการป้องกันและโทเค็นรีเฟรชถูกใช้เพื่อขอโทเค็นการเข้าถึงใหม่ โทเค็น ID จะถูกใช้ในการเก็บข้อมูลผู้ใช้ในฝั่งไคลเอนต์ ลดความจำเป็นในการขอข้อมูลจากเซิร์ฟเวอร์อนุญาตเพิ่มเติม ในหลาย ๆ กรณียังสามารถพูดได้อย่างปลอดภัยว่าการมีโทเค็น ID เท่ากับการที่ผู้ใช้ถูกพิสูจน์ตัวตนแล้ว
แนวทางปฏิบัติที่ดีที่สุด ในการจัดการโทเค็น
- ใช้ HTTPS: ใช้ HTTPS เสมอเพื่อรักษาความปลอดภัยในการสื่อสารระหว่างไคลเอนต์และเซิร์ฟเวอร์อนุญาต ป้องกันบุคคลที่ไม่ได้รับอนุญาตจากการดักฟังและการขโมยโทเค็น
- ตั้งค่าระยะเวลาการหมดอายุของโทเค็นให้เหมาะสม: โทเค็นการเข้าถึงควรมีอายุการใช้งานที่สั้นเพื่อลดความเสี่ยงของการถูกเปิดเผย โทเค็นรีเฟรชสามารถมีระยะเวลาการใช้งานที่นานกว่า
- เปิดใช้งานการหมุนโทเค็นรีเฟรช: ใช้การหมุนโทเค็นรีเฟรชเพื่อลดความเสี่ยงของการถูกเปิดเผยโทเค็นรีเฟรช
- ใช้การควบคุมการเข้าถึงอย่างละเอียด: ใช้สิทธิ์อย่างละเอียดเพื่อจำกัดการอนุมัติของโทเค็นการเข้าถึง ขอสิทธิ์ที่จำเป็นสำหรับแอปพลิเคชันไคลเอนต์เท่านั้น หลีกเลี่ยงการใช้ "all" หรือ "admin" เพื่อข้ามการตรวจสอบสิทธิ์เว้นแต่จำเป็นจริงๆ
สรุป: ความแตกต่างหลักของโทเค็นการเข้าถึง โทเค็นรีเฟรช และโทเค็น ID ใน OIDC
ในโปรโตคอล OIDC โทเค็นรีเฟรช โทเค็นการเข้าถึง และโทเค็น ID ทำงานร่วมกันเพื่อให้การพิสูจน์ตัวตนของผู้ใช้ปลอดภัยและราบรื่น
- โทเค็นการเข้าถึงให้สิทธิ์ในการเข้าถึงทรัพยากรที่ได้รับการป้องกัน
- โทเค็นรีเฟรชกำจัดการแทรกแซงของผู้ใช้เพื่อให้โทเค็นการเข้าถึงใหม่
- โทเค็น ID ให้ข้อมูลผู้ใช้ที่เก็บในฝั่งไคลเอนต์ เพิ่มประสิทธิภาพการทำงาน
การเข้าใจบทบาทและความสำคัญของโทเค็นเหล่านี้เป็นสิ่งสำคัญสำหรับนักพัฒนาที่ นำการพิสูจน์ตัวตน OIDC ไปใช้ในแอปพลิเคชันของพวกเขา