การไหลแฝง vs. การไหลของรหัสการอนุญาต: ทำไมการไหลแฝงถึงไม่ปลอดภัยอีกต่อไป?
ทำไมถึงมี "การไหลของรหัสการอนุญาต" ใน OAuth 2.0 ทั้งที่มี "การไหลแฝง" อยู่แล้ว? มาค้นหารายละเอียดเกี่ยวกับสองประเภทนี้และเข้าใจว่าทำไมคุณควรหลีกเลี่ยงการใช้การไหลแฝง
ทำไมถึงมี "การไหลของรหัสการอนุญาต" ใน OAuth 2.0 ทั้งที่มี "การไหลแฝง" อยู่แล้ว? มาค้นหารายละเอียดเกี่ยวกับสองประเภทนี้และเข้าใจว่าทำไมคุณควรหลีกเลี่ยงการใช้การไหลแฝง
การไหลของรหัสการอนุญาต และ การไหลแฝง เป็นสองประเภทกระบวนการที่ใช้บ่อยใน OAuth 2.0 ที่ช่วยให้การอนุญาตของผู้ใช้สำหรับเว็บแอปพลิเคชันมีความปลอดภัยและมีประสิทธิภาพ ทั้งสองกระบวนการมีขั้นตอนการอนุญาตที่อนุญาตให้ผู้ใช้ให้สิทธิ์ในการเข้าถึงแอปพลิเคชันโดยไม่ต้องเผยแพร่รหัสผ่านของพวกเขาโดยตรง การไหลแฝงถูกพัฒนาขึ้นเพื่อตอบสนองข้อจำกัดของเบราว์เซอร์ในแต่ก่อน แต่ด้วยเทคโนโลยีเว็บที่ก้าวหน้า การไหลของรหัสการอนุญาตได้กลายเป็นตัวเลือกที่พึงประสงค์มากขึ้นสำหรับนักพัฒนาหลายคนเนื่องจากคุณสมบัติการรักษาความปลอดภัยที่เพิ่มขึ้น
ในบทความนี้ เราจะสำรวจความแตกต่างระหว่างทั้งสองประเภทรหัสนี้และให้เหตุผลว่าทำไมคุณควรหลีกเลี่ยงการใช้การไหลแฝงมากกว่าไปใช้การไหลของรหัสการอนุญาต
ก่อนที่เราจะลงลึกในรายละเอียดของสองประเภทรหัสนี้ มาเข้าใจว่า OAuth 2.0 คืออะไรและทำไมมันถึงสำคัญสำหรับเว็บแอปพลิเคชันสมัยใหม่
เมื่อคนพูดถึง OAuth เรามักหมายถึง OAuth 2.0 หรือที่รู้จักว่า "Open Authorization" ซึ่งเป็นโปรโตคอลที่ขนาดเล็กซึ่งอนุญาตให้เว็บไซต์หรือแอปพลิเคชันใช้ทรัพยากรจากบริการเว็บอื่น ๆ ในนามของผู้ใช้ มันเข้ามาแทนที่ OAuth 1.0 ในปี 2012 และนับแต่นั้นได้กลายเป็นมาตรฐานที่ได้รับการยอมรับอย่างกว้างขวางสำหรับการอนุญาตทางดิจิตอล OAuth 2.0 ถูกออกแบบมาเพื่อให้การเข้าถึงที่มีการควบคุมสำหรับผู้ใช้ โดยอนุญาตให้แอปพลิเคชันลูกค้าหรือที่เรียกว่าแอปพลิเคชันผู้ใช้งานมีสิทธิพิเศษเฉพาะในการโต้ตอบกับทรัพยากรที่แสดงถึงผู้ใช้ โดยทั้งหมดนี้จะไม่เปิดเผยรายละเอียดการเข้าสู่ระบบของผู้ใช้
แม้ว่า OAuth 2.0 จะใช้ประโยชน์หลักในสภาพแวดล้อมเว็บ แต่กรอบของมันยังขยายไปยังฟอร์มลูกค้าแบบต่าง ๆ นี่รวมถึงแอปที่ใช้กับเบราว์เซอร์ แอปพลิเคชันเว็บแบบเซิร์ฟเวอร์ แอปพลิเคชันพื้นเมืองหรือแอปพลิเคชันมือถือ รวมถึงอุปกรณ์ที่เชื่อมโยงกัน ซึ่งแสดงถึงวิธีในการจัดการการเข้าถึงที่มอบหมายในแพลตฟอร์มที่หลากหลาย มันนำเสนอแนวคิดของ "ประเภทการให้สิทธิ์" ในการนิยามขั้นตอนการอนุญาตระหว่างแอปพลิเคชันผู้ใช้ ผู้ใช้ และเซิร์ฟเวอร์การอนุญาต ประเภทรหัสเหล่านี้ถูกใช้เพื่อตัดสินว่าแอปพลิเคชันผู้ใช้สามารถขอรับโทเค็นการเข้าถึงเพื่อเข้าถึงทรัพยากรของผู้ใช้อย่างไร ประเภทรหัสที่ใช้กันอย่างแพร่หลายใน OAuth 2.0 ได้แก่:
การไหลแฝงเป็นกระบวนการง่ายๆ ของ OAuth 2.0 ที่จะให้โทเค็นการเข้าถึงโดยตรงกลับไปยังลูกค้าใน URI ที่เปลี่ยนทิศทาง โดยไม่ต้องมีขั้นตอนเพิ่มเติมในการแลกเปลี่ยนรหัสการอนุญาตเพื่อโทเค็น มันถูกออกแบบมาสำหรับเว็บแอปพลิเคชันที่ไม่สามารถส่งคำร้องไปยัง endpoint ของโทเค็นได้ด้วยข้อจำกัดของเบราว์เซอร์
การไหลแฝงมีช่องโหว่ด้านความปลอดภัยหลายประการ:
เนื่องจากมีข้อกังวลด้านความปลอดภัยเหล่านี้ การไหลแฝงจึงไม่ได้แนะนำให้ใช้กับเว็บแอปพลิเคชันสมัยใหม่แทนที่ควรใช้การไหลของรหัสการอนุญาตที่มี PKCE (Proof Key for Code Exchange) เป็นตัวเลือกที่ปลอดภัยกว่าในการอนุญาตผู้ใช้
การไหลของรหัสการอนุญาตนั้นเป็นกระบวนการ OAuth 2.0 ที่มีความปลอดภัยมากขึ้น โดยแยกกระบวนการอนุญาตออกเป็นสองขั้นตอน: แอปพลิเคชันลูกค้าต้องได้รับรหัสการอนุญาตจากเซิร์ฟเวอร์การอนุญาตก่อน จากนั้นจึงแลกเปลี่ยนรหัสเพื่อรับโทเค็นการเข้าถึง กระบวนการนี้ถูกออกแบบมาสำหรับแอปพลิเคชันเว็บแบบเซิร์ฟเวอร์ที่สามารถเก็บข้อมูลประจำตัวและจัดการกับโทเค็นการเข้าถึงได้อย่างปลอดภัย เมื่อมีการแนะนำการขยาย PKCE กระบวนการนี้สามารถใช้ในแอปพลิเคชันที่ใช้กับเบราว์เซอร์ได้เช่นกัน
ศึกษาข้อมูลเพิ่มเติมเกี่ยวกับ PKCE
| ด้าน | การไหลของรหัสการอนุญาต | การไหลแฝง |
|---|---|---|
| การส่งมอบโทเค็น | โทเค็นการเข้าถึงจะถูกส่งมอบให้กับลูกค้าผ่านคำร้องที่ปลอดภัย | โทเค็นการเข้าถึงจะถูกส่งมอบโดยตรงไปยังลูกค้าใน URL fragment |
| ระดับความปลอดภัย | สูง (โทเค็นจะไม่ถูกเปิดเผยในเบราว์เซอร์) | ต่ำ (โทเค็นจะถูกเปิดเผยในเบราว์เซอร์) |
| กรณีการใช้งาน | แอปพลิเคชันเว็บแบบเซิร์ฟเวอร์และแอปพลิเคชันที่ใช้เบราว์เซอร์ (ด้วย PKCE) | แอปพลิเคชันที่ใช้เบราว์เซอร์เท่านั้น |
| การใช้งานสมัยใหม่ | แนะนำสำหรับแอปพลิเคชันทุกประเภท | ไม่แนะนำและควรหลีกเลี่ยง |
คำตอบคือ ใช่:
การไหลของรหัสการอนุญาตแนะนำขั้นตอนเพิ่มเติมในการแลกรหัสการอนุญาตเพื่อรับโทเค็นการเข้าถึง ซึ่งลดความเสี่ยงในการเปิดเผยโทเค็นอย่างมาก
ถ้าคุณกำลังใช้การไหลแฝงอยู่ในธุรกิจของคุณ การเปลี่ยนไปใช้การไหลของรหัสการอนุญาตพร้อม PKCE จะช่วยให้มีความปลอดภัยที่ดีขึ้นทั้งสำหรับคุณและผู้ใช้ของคุณ เราเข้าใจว่าการย้ายและจัดการระบบการรักษาการกำกับดูแลตัวตนอาจจะยุ่งยากและมีค่าใช้จ่ายสูง แต่ประโยชน์ของความปลอดภัยและการปฏิบัติตามข้อกำหนดที่ดีขึ้นย่อมคุ้มค่าสำหรับความพยายามใช่หรือไม่?