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

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

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 สำหรับลูกค้า 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" คุณควรตรวจสอบว่ากลยุทธ์การอัดแน่นของ 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 วัน) ได้ด้วย เพื่อให้แน่ใจว่ามีการลบโทเค็นจากโทเค็นที่ถูกลบออกจากพื้นที่เก็บข้อมูลเร็วขึ้น

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