Antipattern: กำหนดการหมดอายุที่นานสำหรับโทเค็น OAuth

คุณกำลังดูเอกสารประกอบของ Apigee Edge
ไปที่ เอกสารประกอบของ Apigee X
info

Apigee Edge มีเฟรมเวิร์ก OAuth 2.0 เพื่อ รักษาความปลอดภัยของ API OAuth2 เป็นหนึ่งในรูปแบบการตรวจสอบสิทธิ์และการให้สิทธิ์แบบโอเพนสแตนดาร์ดที่อิงตามโทเค็นที่ได้รับความนิยมมากที่สุด ซึ่งช่วยให้แอปพลิเคชันไคลเอ็นต์เข้าถึง API ในนามของผู้ใช้ได้โดยไม่ต้อง ให้ผู้ใช้เปิดเผยชื่อผู้ใช้และรหัสผ่าน

Apigee Edge ช่วยให้นักพัฒนาแอปสร้างโทเค็นเพื่อการเข้าถึงและ/หรือโทเค็นการรีเฟรชได้โดยการใช้ประเภทการให้สิทธิ์ OAuth2 อย่างใดอย่างหนึ่งจาก 4 ประเภท ได้แก่ ข้อมูลเข้าสู่ระบบของไคลเอ็นต์, รหัสผ่าน, โดยนัย และ รหัสการให้สิทธิ์ - โดยใช้นโยบาย OAuthv2 แอปพลิเคชันไคลเอ็นต์ใช้โทเค็นเพื่อการเข้าถึงในการใช้ API ที่ปลอดภัย โทเค็นเพื่อการเข้าถึงแต่ละรายการจะมีเวลาหมดอายุของตัวเอง ซึ่งสามารถตั้งค่าได้ในนโยบาย OAuthv2

ระบบจะออกโทเค็นการรีเฟรชพร้อมกับโทเค็นเพื่อการเข้าถึงสำหรับประเภทการให้สิทธิ์บางประเภท (ไม่บังคับ) โทเค็นการรีเฟรช ใช้เพื่อรับโทเค็นเพื่อการเข้าถึงใหม่ที่ใช้งานได้หลังจากโทเค็นเพื่อการเข้าถึงเดิมหมดอายุหรือ ถูกเพิกถอน นอกจากนี้ คุณยังตั้งเวลาหมดอายุสำหรับโทเค็นการรีเฟรชได้ในนโยบาย OAuthv2

รูปแบบที่ไม่แนะนำ

การตั้งเวลาหมดอายุที่นานสำหรับโทเค็นเพื่อการเข้าถึงและ/หรือโทเค็นการรีเฟรชในนโยบาย OAuthv2 จะทำให้โทเค็น OAuth สะสมและใช้พื้นที่ดิสก์มากขึ้นในโหนด Cassandra

ตัวอย่างนโยบาย OAuthV2 ต่อไปนี้แสดงเวลาหมดอายุที่นาน 200 วันสำหรับโทเค็นการรีเฟรช

<OAuthV2 name="GenerateAccessToken">
    <Operation>GenerateAccessToken</Operation>
    <ExpiresIn>1800000</ExpiresIn> <!-- 30 minutes -->
    <RefreshTokenExpiresIn>17280000000</RefreshTokenExpiresIn> <!-- 200 days -->
    <SupportedGrantTypes>
      <GrantType>password</GrantType>
    </SupportedGrantTypes>
    <GenerateResponse enabled="true"/>
</OAuthV2>

ในตัวอย่างข้างต้น

  • โทเค็นเพื่อการเข้าถึงตั้งค่าเวลาหมดอายุไว้ที่ 30 นาที ซึ่งเป็นเวลาที่สั้นกว่าอย่างสมเหตุสมผล
  • โทเค็นการรีเฟรชตั้งค่าเวลาหมดอายุไว้ที่ 200 วัน ซึ่งเป็นเวลาที่นานมาก
  • หากการรับส่งข้อมูลไปยัง API นี้อยู่ที่ 10 คำขอ/วินาที ระบบจะสร้างโทเค็นได้มากถึง 864,000 รายการ ต่อวัน
  • เนื่องจากโทเค็นการรีเฟรชจะหมดอายุหลังจากผ่านไป 200 วันเท่านั้น โทเค็นเหล่านี้จึงยังคงอยู่ในที่เก็บข้อมูล (Cassandra) เป็นเวลานาน ซึ่งนำไปสู่การสะสมอย่างต่อเนื่อง

ผลกระทบ

  • ทำให้การใช้พื้นที่ดิสก์ในที่เก็บข้อมูล (Cassandra) เพิ่มขึ้นอย่างมาก
  • สำหรับผู้ใช้ Private Cloud การดำเนินการนี้อาจเพิ่มค่าใช้จ่ายในการจัดเก็บข้อมูล หรือในกรณีที่เลวร้ายที่สุด ดิสก์อาจเต็มและทำให้เกิดข้อผิดพลาดขณะรันไทม์หรือการหยุดทำงาน

แนวทางปฏิบัติแนะนำ

ใช้เวลาหมดอายุที่สั้นลงสำหรับโทเค็นเพื่อการเข้าถึงและโทเค็นการรีเฟรช OAuth ตามข้อกำหนดด้านความปลอดภัยที่เฉพาะเจาะจง เพื่อให้ระบบล้างโทเค็นได้อย่างรวดเร็วและหลีกเลี่ยงการสะสม

ตั้งเวลาหมดอายุสำหรับโทเค็นการรีเฟรชให้มีระยะเวลานานกว่าโทเค็นเพื่อการเข้าถึงเล็กน้อย เช่น หากคุณตั้งเวลาหมดอายุสำหรับโทเค็นเพื่อการเข้าถึงไว้ที่ 30 นาที จากนั้นตั้งเวลาหมดอายุสำหรับ โทเค็นการรีเฟรชไว้ที่ 60 นาที

การดำเนินการนี้จะช่วยให้มั่นใจได้ว่า

  • มีเวลาเพียงพอที่จะใช้โทเค็นการรีเฟรชเพื่อสร้างโทเค็นเพื่อการเข้าถึงและโทเค็นการรีเฟรชใหม่หลังจากโทเค็นเพื่อการเข้าถึงหมดอายุ
  • โทเค็นการรีเฟรชจะหมดอายุในอีกสักครู่และสามารถล้างได้ทันเวลาเพื่อ หลีกเลี่ยงการสะสม

อ่านเพิ่มเติม