Antipattern: ตั้งเวลาไม่ให้หมดอายุสำหรับโทเค็น OAuth

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

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

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

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

รูปแบบที่ไม่แนะนำนี้เกี่ยวข้องกับรูปแบบที่ไม่แนะนำในการ ตั้งเวลาหมดอายุที่นาน สำหรับโทเค็น OAuth

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

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

ตัวอย่างนโยบาย OAuthV2 ต่อไปนี้แสดงการกำหนดค่า <RefreshTokenExpiresIn> ที่ขาดหายไป

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

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

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

ผลกระทบ

  • หากสร้างโทเค็นการรีเฟรชโดยไม่มีการหมดอายุ จะเกิดผลกระทบหลัก 2 ประการ ได้แก่
    • โทเค็นการรีเฟรชจะใช้รับโทเค็นเพื่อการเข้าถึงได้ทุกเมื่อในอนาคต ซึ่งอาจเป็นเวลาหลายปี ซึ่งอาจส่งผลกระทบต่อความปลอดภัย
    • ระบบจะไม่ลบแถวใน Cassandra ที่มีโทเค็นการรีเฟรช ซึ่งจะทำให้ข้อมูลสะสมใน Cassandra
  • หากคุณไม่ใช้โทเค็นการรีเฟรช เพื่อรับโทเค็นเพื่อการเข้าถึงใหม่ แต่สร้างโทเค็นการรีเฟรชและโทเค็นเพื่อการเข้าถึงใหม่แทน โทเค็นการรีเฟรชเก่าจะยังคงอยู่ใน Cassandra ด้วยเหตุนี้ โทเค็นการรีเฟรช จะสะสมอยู่ใน Cassandra ต่อไป ซึ่งจะทำให้เกิดการขยายตัว การใช้ดิสก์เพิ่มขึ้น และการบีบอัดที่หนักขึ้น และในที่สุดจะทำให้เกิดเวลาในการตอบสนองในการอ่าน/เขียน ใน Cassandra

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

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

แนวทางปฏิบัติแนะนำสำหรับลูกค้า Edge for Private Cloud โดยเฉพาะ

ส่วนนี้อธิบายแนวทางปฏิบัติแนะนำสำหรับลูกค้า Edge for Private Cloud โดยเฉพาะ

ระบุการหมดอายุของโทเค็นการรีเฟรชเริ่มต้น

โดยค่าเริ่มต้น หากไม่ได้ระบุการหมดอายุของโทเค็นการรีเฟรชในการกำหนดค่านโยบาย Edge จะสร้างโทเค็นการรีเฟรชโดยไม่มีการหมดอายุ คุณสามารถลบล้างลักษณะการทำงานนี้ได้โดย ทำตามขั้นตอนต่อไปนี้

  1. ในโหนด Message Processor ให้แก้ไขหรือสร้างไฟล์การลบล้างการกำหนดค่า $APIGEE_ROOT/customer/application/message-processor.properties ตรวจสอบว่าผู้ใช้ apigee อ่านไฟล์นี้ได้
  2. เพิ่มบรรทัดต่อไปนี้ลงในไฟล์
    conf_keymanagement_oauth_refresh_token_expiry_time_in_millis=3600000
    การดำเนินการนี้จะตั้งค่าการหมดอายุของโทเค็นการรีเฟรชเริ่มต้นเป็น 1 ชั่วโมง หากไม่ได้ระบุไว้ในการกำหนดค่านโยบาย คุณสามารถเปลี่ยนค่าเริ่มต้นนี้ได้ตามความต้องการของธุรกิจ
  3. รีสตาร์ทบริการ Message Processor โดยใช้คำสั่งต่อไปนี้
    apigee-service edge-message-processor restart
  4. ทำซ้ำขั้นตอนข้างต้นในโหนด Message Processor ทั้งหมดทีละโหนด

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

ลองอัปเกรดเป็น Apigee เวอร์ชันล่าสุดที่เผยแพร่ต่อสาธารณะ Apigee จะเผยแพร่การแก้ไขและการปรับปรุงอย่างต่อเนื่อง ซึ่งจะช่วยปรับปรุงและเพิ่มประสิทธิภาพการจัดการโทเค็นภายใน Apigee ใน Apigee ระบบจะจัดเก็บโทเค็นเพื่อการเข้าถึงและโทเค็นการรีเฟรชไว้ใน Cassandra ภายใน Keyspace "kms" คุณควรตรวจสอบว่าได้ตั้งค่ากลยุทธ์การบีบอัดของ Keyspace นี้เป็น LeveledCompactionStrategy และตรวจสอบว่าไม่มีดัชนีต่อไปนี้ ไม่ อยู่:
  • kms.oauth_20_access_tokens.oauth_20_access_tokens_organization_name_idx#f0f0f0 และ
  • kms.oauth_20_access_tokens.oauth_20_access_tokens_status_idx

นอกจากนี้ คุณยังลด gc_grace_seconds ในตาราง kms.oauth_20_access_tokens จากค่าเริ่มต้น 10 วันเป็นค่าที่ต่ำกว่า (เช่น 3 วัน) เพื่อให้แน่ใจว่าระบบจะล้าง Tombstone ที่สร้างขึ้นเนื่องจากการลบโทเค็นออกจากที่เก็บข้อมูลได้เร็วขึ้น

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