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

คีย์การลงนาม

คีย์การลงนาม OIDC ของ Logto หรือที่รู้จักกันในชื่อ "OIDC private keys" และ "OIDC cookie keys" เป็นคีย์การลงนามที่ใช้ในการลงนาม JWTs (โทเค็นการเข้าถึง (access tokens) และ โทเค็น ID (ID tokens)) และคุกกี้ของเบราว์เซอร์ใน เซสชันการลงชื่อเข้าใช้ ของ Logto คีย์การลงนามเหล่านี้ถูกสร้างขึ้นเมื่อทำการเริ่มต้นฐานข้อมูล Logto (open-source) หรือสร้างผู้เช่าใหม่ (Cloud) และสามารถจัดการได้ผ่าน CLI (open-source), Management APIs หรือ Console UI

โดยค่าเริ่มต้น Logto ใช้อัลกอริทึม elliptic curve (EC) ในการสร้างลายเซ็นดิจิทัล อย่างไรก็ตาม เนื่องจากผู้ใช้มักต้องการตรวจสอบลายเซ็น JWT และเครื่องมือเก่าหลายตัวไม่รองรับอัลกอริทึม EC (รองรับเฉพาะ RSA) เราจึงได้พัฒนาฟังก์ชันการหมุนคีย์ส่วนตัวและอนุญาตให้ผู้ใช้เลือกอัลกอริทึมลายเซ็น (รวมถึงทั้ง RSA และ EC) เพื่อให้แน่ใจว่าระบบสามารถทำงานร่วมกับบริการที่ใช้เครื่องมือตรวจสอบลายเซ็นที่ล้าสมัยได้

บันทึก:

ในทางทฤษฎี คีย์การลงนามไม่ควรถูกเปิดเผยและไม่มีเวลาหมดอายุ หมายความว่าไม่จำเป็นต้องหมุนคีย์ อย่างไรก็ตาม การหมุนคีย์การลงนามเป็นระยะหลังจากช่วงเวลาหนึ่งสามารถเพิ่มความปลอดภัยได้

มันทำงานอย่างไร?

  • OIDC private key เมื่อเริ่มต้นใช้งาน Logto จะมีการสร้างคู่คีย์สาธารณะและคีย์ส่วนตัวโดยอัตโนมัติและลงทะเบียนในผู้ให้บริการ OIDC ที่อยู่เบื้องหลัง ดังนั้นเมื่อ Logto ออก JWT ใหม่ (โทเค็นการเข้าถึงหรือโทเค็น ID) โทเค็นจะถูกลงนามด้วยคีย์ส่วนตัว ในขณะเดียวกัน แอปพลิเคชันลูกค้าที่ได้รับ JWT สามารถใช้คีย์สาธารณะที่จับคู่กันเพื่อตรวจสอบลายเซ็นของโทเค็น เพื่อให้แน่ใจว่าโทเค็นไม่ได้ถูกแก้ไขโดยบุคคลที่สาม คีย์ส่วนตัวจะถูกป้องกันบนเซิร์ฟเวอร์ Logto ส่วนคีย์สาธารณะตามชื่อคือสาธารณะสำหรับทุกคน และสามารถเข้าถึงได้ผ่านอินเทอร์เฟซ /oidc/jwks ของ OIDC endpoint อัลกอริทึมคีย์การลงนามสามารถระบุได้เมื่อสร้างคีย์ส่วนตัว และ Logto ใช้อัลกอริทึม EC (Elliptic Curve) เป็นค่าเริ่มต้น ผู้ใช้ที่เป็นผู้ดูแลระบบสามารถเปลี่ยนอัลกอริทึมเริ่มต้นเป็น RSA (Rivest-Shamir-Adleman) โดยการหมุนคีย์ส่วนตัว
  • OIDC cookie key เมื่อผู้ใช้เริ่มต้นการลงชื่อเข้าใช้หรือสมัครสมาชิก จะมีการสร้าง "OIDC session" บนเซิร์ฟเวอร์ รวมถึงชุดของคุกกี้เบราว์เซอร์ ด้วยคุกกี้เหล่านี้ เบราว์เซอร์สามารถร้องขอ Logto Experience API เพื่อดำเนินการโต้ตอบต่าง ๆ ในนามของผู้ใช้ เช่น การลงชื่อเข้าใช้ การสมัครสมาชิก และการรีเซ็ตรหัสผ่าน อย่างไรก็ตาม ไม่เหมือนกับ JWTs คุกกี้จะถูกลงนามและตรวจสอบโดยบริการ OIDC ของ Logto เอง ไม่จำเป็นต้องใช้มาตรการการเข้ารหัสแบบอสมมาตร ดังนั้นเราจึงไม่มีคีย์สาธารณะที่จับคู่กันสำหรับคีย์การลงนามคุกกี้ หรืออัลกอริทึมการเข้ารหัสแบบอสมมาตร

หมุนคีย์การลงนามจาก Console UI

Logto แนะนำฟีเจอร์ "Signing Keys Rotation" ซึ่งช่วยให้คุณสร้าง OIDC private key และ cookie key ใหม่ในผู้เช่าของคุณ

  1. ไปที่ คอนโซล > การตั้งค่าเทนเนนต์ > การกำหนดค่า OIDC จากนั้นคุณสามารถจัดการทั้ง OIDC private keys และ OIDC cookie keys ได้

  2. หากต้องการหมุนคีย์สำหรับลงนาม ให้คลิกปุ่ม "Rotate private keys" หรือ "Rotate cookie keys" เมื่อหมุนคีย์ส่วนตัว คุณสามารถเลือกอัลกอริทึมสำหรับลงนามได้ด้วย

  3. คุณจะพบตารางที่แสดงคีย์สำหรับลงนามทั้งหมดที่ใช้งานอยู่ หมายเหตุ: คุณสามารถลบคีย์ก่อนหน้าได้ แต่ไม่สามารถลบคีย์ปัจจุบันได้

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

โปรดจำไว้ว่าการหมุนเกี่ยวข้องกับการดำเนินการสามอย่างต่อไปนี้:

  1. สร้างคีย์การลงนามใหม่: สิ่งนี้จะต้องให้ แอปพลิเคชัน และ API ของคุณทั้งหมดใช้คีย์การลงนามใหม่
  2. หมุนคีย์ปัจจุบัน: คีย์ที่มีอยู่จะถูกกำหนดเป็น "ก่อนหน้า" หลังจากการหมุนและจะไม่ถูกใช้โดยแอปพลิเคชันและ API ที่สร้างขึ้นใหม่ อย่างไรก็ตาม โทเค็นที่ลงนามด้วยคีย์นี้ยังคงใช้ได้
  3. ลบคีย์ก่อนหน้าของคุณ: คีย์ที่ถูกระบุว่า "ก่อนหน้า" จะถูกเพิกถอนและลบออกจากตาราง
คำเตือน:

อย่าหมุนคีย์การลงนามติดต่อกัน (สองครั้งหรือมากกว่า) เนื่องจากอาจทำให้โทเค็นที่ออกทั้งหมดไม่ถูกต้อง

  • สำหรับผู้ใช้ OSS หลังจากหมุนคีย์การลงนาม จำเป็นต้องรีสตาร์ท Logto instance เพื่อให้คีย์การลงนามใหม่มีผล
  • สำหรับผู้ใช้ Cloud คีย์การลงนามใหม่จะมีผลทันทีหลังจากการหมุน แต่โปรดตรวจสอบว่าอย่าหมุนคีย์การลงนามหลายครั้งติดต่อกัน

บทนำสู่อัลกอริทึมการลงนาม EC และ RSA ใน JWT