ข้ามไปยังเนื้อหาหลัก

หมุนคีย์สำหรับลงนาม (OSS)

บันทึก:

หากคุณใช้ Logto Cloud คุณสามารถหมุนคีย์สำหรับลงนามได้ใน Console UI โปรดดู คู่มือนี้

Logto OSS รองรับการหมุนคีย์สำหรับลงนามตั้งแต่เวอร์ชัน v1.8

คีย์สำหรับลงนาม OIDC ของ Logto หรือที่เรียกว่า “OIDC private keys” และ “OIDC cookie keys” คือคีย์ที่ใช้สำหรับลงนาม JWTs (โทเค็นการเข้าถึง (Access tokens) และ โทเค็น ID (ID tokens)) และคุกกี้ของเบราว์เซอร์ในเซสชันการลงชื่อเข้าใช้ของ Logto

การหมุนคีย์สำหรับลงนามของคุณเป็นประจำจะช่วยลดความเสี่ยงจากการที่คีย์อาจถูกเปิดเผย Logto แนะนำให้คุณหมุนคีย์สำหรับลงนามอย่างน้อยปีละครั้ง

หมุนคีย์สำหรับลงนาม OIDC ส่วนตัว

ใช้คำสั่ง CLI ด้านล่างเพื่อสร้างคีย์สำหรับลงนาม OIDC ส่วนตัวใหม่ โดยปกติคีย์ใหม่จะมีผลทันที หากต้องการวางแผนการหมุนคีย์และให้เวลาคลายเอนต์รีเฟรช JWKS ก่อนที่คีย์ใหม่จะใช้ลงนาม JWTs ให้กำหนดช่วงเวลาผ่อนผัน (grace period)

ตัวเลือกที่มีให้ใช้:

--type          (ไม่บังคับ) อัลกอริทึมของคีย์สำหรับลงนามสำหรับ JWTs ของคุณ
ค่าเป็น "rsa" หรือ "ec" ค่าเริ่มต้นคือ "ec"
--gracePeriod (ไม่บังคับ) ช่วงเวลาผ่อนผัน (วินาที) สำหรับการหมุนคีย์ส่วนตัวแบบ staged
ค่าเริ่มต้นคือค่าตัวแปรแวดล้อม PRIVATE_KEY_ROTATION_GRACE_PERIOD หรือ 0 หากไม่ได้ตั้งค่า
logto db config rotate oidc.privateKeys --type rsa

ตัวอย่างเช่น หากต้องการวางแผนคีย์ส่วนตัวใหม่ให้รอ 4 ชั่วโมงก่อนจะมีผลใช้งาน:

logto db config rotate oidc.privateKeys --type rsa --gracePeriod 14400

คุณยังสามารถตั้งค่าช่วงเวลาผ่อนผันเริ่มต้นสำหรับการหมุนคีย์ส่วนตัวด้วยตัวแปรแวดล้อม:

PRIVATE_KEY_ROTATION_GRACE_PERIOD=14400

ตั้งค่าตัวแปรแวดล้อมนี้บนบริการ Logto เมื่อหมุนผ่าน Admin Console หรือ Management API หรือใน shell ที่คุณรันคำสั่ง CLI เมื่อหมุนผ่าน CLI

ใช้คำสั่ง CLI ด้านล่างเพื่อสร้างคีย์สำหรับคุกกี้ OIDC ใหม่ การหมุนคีย์สำหรับคุกกี้ไม่รองรับช่วงเวลาผ่อนผัน

logto db config rotate oidc.cookieKeys

แล้วคีย์ก่อนหน้าล่ะ?

สำหรับ OIDC private keys, Logto จะเก็บคีย์สูงสุดสามชุดระหว่างการหมุนแบบ staged:

  • Next: คีย์ใหม่ที่รอให้ช่วงเวลาผ่อนผันสิ้นสุด
  • Current: คีย์ที่ใช้อยู่ในปัจจุบันสำหรับลงนาม JWTs ที่ออกใหม่
  • Previous: คีย์ที่เพิ่งถูกหมุนออกล่าสุด เก็บไว้เพื่อให้ JWTs ที่มีอยู่ยังคงใช้งานได้

หลังจากช่วงเวลาผ่อนผัน คีย์ Next จะกลายเป็น Current, คีย์ Current เดิมจะกลายเป็น Previous และคีย์ Previous ที่เก่าที่สุดจะถูกลบออก

สำหรับคีย์คุกกี้ Logto จะเก็บคีย์ปัจจุบันและคีย์ก่อนหน้า โปรดระวังเมื่อจะลบคีย์ก่อนหน้า เพราะอาจทำให้เกิดปัญหาที่ไม่คาดคิด แนะนำให้เก็บคีย์ก่อนหน้าจนกว่าคุณจะแน่ใจว่าเซสชันหรือโทเค็นที่ลงนามด้วยคีย์นั้นหมดอายุทั้งหมดแล้ว

การแก้ไขปัญหา

ใช้ Logto เป็น OIDC Provider ใน Cloudflare Zero Trust

หากคุณต้องการใช้ Logto เป็น OIDC provider กับ Cloudflare Zero Trust โปรดทราบว่า Cloudflare Zero Trust ไม่รองรับ OIDC provider ที่ใช้อัลกอริทึม ECDSA เมื่อหมุนคีย์สำหรับลงนาม OIDC ส่วนตัว ให้แน่ใจว่าใช้ RSA โดยระบุ --type rsa ในคำสั่งหมุนคีย์:

logto db config rotate oidc.privateKeys --type rsa