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

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

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

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

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

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

ลาย Antipattern

การตั้งค่าไม่มีเวลาหมดอายุสำหรับโทเค็นการรีเฟรชในนโยบาย 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 รายการ ใน 1 วัน

ผลกระทบ

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

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

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

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

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

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

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

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

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

ลองอัปเกรด Apigee เป็นเวอร์ชันล่าสุดที่พร้อมใช้งานแบบสาธารณะ Apigee ยังคงดำเนินต่อไป เปิดตัวการแก้ไขและการเพิ่มประสิทธิภาพ ซึ่งจะมีการปรับปรุงและเพิ่มประสิทธิภาพการจัดการอย่างต่อเนื่อง ของโทเค็นภายใน Apigee ใน Apigee โทเค็นการเข้าถึงและการรีเฟรชจะจัดเก็บอยู่ใน Cassandra ภายในช่องว่าง “kms” คุณควรตรวจสอบว่ากลยุทธ์การย่อข้อมูล ตั้งค่าคีย์สเปซเป็น 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 ที่สร้างขึ้นเนื่องจากมีการลบโทเค็น ลบถาวรออกจากพื้นที่เก็บข้อมูลเร็วขึ้น

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