คีย์สำหรับลงนาม (Signing keys)
คีย์สำหรับลงนาม OIDC ของ Logto (OIDC signing keys) หรือที่รู้จักกันในชื่อ "OIDC private keys" และ "OIDC cookie keys" คือคีย์ที่ใช้สำหรับลงนาม JWTs (โทเค็นการเข้าถึง (Access tokens) และ โทเค็น ID (ID tokens)) และคุกกี้ของเบราว์เซอร์ใน เซสชันการลงชื่อเข้าใช้ (sign-in sessions) ของ Logto คีย์เหล่านี้จะถูกสร้างขึ้นเมื่อมีการ seed ฐานข้อมูล Logto (โอเพ่นซอร์ส) หรือสร้าง tenant ใหม่ (Cloud) และสามารถจัดการได้ผ่าน CLI (โอเพ่นซอร์ส), Management API หรือ Console UI
โดยปกติ Logto จะใช้ อัลกอริทึม elliptic curve (EC) ในการสร้างลายเซ็นดิจิทัล อย่างไรก็ตาม เนื่องจากผู้ใช้มักต้องตรวจสอบลายเซ็นของ JWT และเครื่องมือรุ่นเก่าหลายตัวไม่รองรับอัลกอริทึม EC (รองรับเฉพาะ RSA) เราจึงได้เพิ่มฟีเจอร์สำหรับหมุน (rotate) คีย์ส่วนตัวและให้ผู้ใช้เลือกอัลกอริทึมสำหรับลายเซ็น (ทั้ง RSA และ EC) เพื่อให้แน่ใจว่าสามารถใช้งานร่วมกับบริการที่ใช้เครื่องมือตรวจสอบลายเซ็นรุ่นเก่าได้
ตามทฤษฎีแล้ว คีย์สำหรับลงนามไม่ควรถูกเปิดเผยและไม่มีวันหมดอายุ หมายความว่าไม่จำเป็นต้องหมุนคีย์ แต่การหมุนคีย์เป็นระยะหลังจากใช้งานไปช่วงเวลาหนึ่งจะช่วยเพิ่มความปลอดภัย
ทำงานอย่างไร?
- OIDC private key
เมื่อเริ่มต้น Logto instance จะมีการสร้างคู่คีย์ public / private ขึ้นโดยอัตโนมัติและลงทะเบียนใน OIDC provider ที่อยู่เบื้องหลัง ดังนั้นเมื่อ Logto ออก JWT ใหม่ (โทเค็นการเข้าถึง หรือ โทเค็น ID) โทเค็นจะถูกลงนามด้วยคีย์ส่วนตัว ในขณะเดียวกัน แอปพลิเคชันไคลเอนต์ใด ๆ ที่ได้รับ JWT สามารถใช้คีย์สาธารณะที่จับคู่กันเพื่อตรวจสอบลายเซ็นของโทเค็น เพื่อให้แน่ใจว่าโทเค็นไม่ได้ถูกแก้ไขโดยบุคคลที่สาม คีย์ส่วนตัวจะถูกป้องกันไว้บนเซิร์ฟเวอร์ Logto ส่วนคีย์สาธารณะจะเปิดเผยต่อสาธารณะและเข้าถึงได้ผ่านอินเทอร์เฟซ
/oidc/jwksของ OIDC endpoint สามารถระบุอัลกอริทึมของคีย์สำหรับลงนามได้ขณะสร้างคีย์ส่วนตัว โดย Logto จะใช้อัลกอริทึม EC (Elliptic Curve) เป็นค่าเริ่มต้น ผู้ดูแลระบบสามารถเปลี่ยนอัลกอริทึมเริ่มต้นเป็น RSA (Rivest-Shamir-Adleman) ได้โดยการหมุนคีย์ส่วนตัว - OIDC cookie key เมื่อผู้ใช้เริ่มต้น flow การลงชื่อเข้าใช้หรือสมัครสมาชิก จะมีการสร้าง "OIDC session" บนเซิร์ฟเวอร์ พร้อมกับชุดคุกกี้ในเบราว์เซอร์ ด้วยคุกกี้เหล่านี้ เบราว์เซอร์สามารถร้องขอ Logto Experience API เพื่อดำเนินการต่าง ๆ ในนามของผู้ใช้ เช่น ลงชื่อเข้าใช้ สมัครสมาชิก และรีเซ็ตรหัสผ่าน อย่างไรก็ตาม แตกต่างจาก JWT คุกกี้จะถูกลงนามและตรวจสอบโดยบริการ OIDC ของ Logto เองเท่านั้น ไม่จำเป็นต้องใช้การเข้ารหัสแบบอสมมาตร (asymmetric cryptography) ดังนั้นเราจึงไม่มีคีย์สาธารณะคู่กับคีย์สำหรับลงนามคุกกี้ และไม่ใช้อัลกอริทึมเข้ารหัสแบบอสมมาตร
หมุนคีย์สำหรับลงนามจาก Console UI
Logto มีฟีเจอร์ "Signing Keys Rotation" ซึ่งช่วยให้คุณสร้าง OIDC private key และ cookie key ใหม่ใน tenant ของคุณ
-
ไปที่ Console > Signing keys จากนั้นคุณสามารถจัดการทั้ง OIDC private keys และ OIDC cookie keys ได้
-
หากต้องการหมุนคีย์สำหรับลงนาม ให้คลิกปุ่ม "Rotate private keys" หรือ "Rotate cookie keys" เมื่อหมุนคีย์ส่วนตัว คุณสามารถเลือกอัลกอริทึมสำหรับลงนามได้ด้วย
-
คุณจะพบตารางที่แสดงคีย์สำหรับลงนามทั้งหมดที่ใช้งานอยู่ หมายเหตุ: คุณสามารถลบคีย์ก่อนหน้าได้ แต่ไม่สามารถลบคีย์ปัจจุบันได้
สถานะ คำอธิบาย ปัจจุบัน หมายถึงคีย์นี้กำลังถูกใช้งานอยู่ในแอปพลิเคชันและ API ของคุณ ก่อนหน้า หมายถึงคีย์ที่เคยใช้งานมาก่อนแต่ถูกหมุนออกแล้ว โทเค็นที่ลงนามด้วยคีย์นี้ยังคงใช้งานได้อยู่
โปรดจำไว้ว่าการหมุนคีย์เกี่ยวข้องกับ 3 ขั้นตอนดังนี้:
- สร้างคีย์สำหรับลงนามใหม่: แอปพลิเคชัน และ API ทั้งหมดของคุณจะต้องใช้คีย์สำหรับลงนามใหม่นี้
- หมุนคีย์ปัจจุบัน: คีย์ที่มีอยู่จะถูกกำหนดสถานะเป็น "ก่อนหน้า" หลังการหมุน และจะไม่ถูกใช้กับแอปพลิเคชันและ API ที่สร้างใหม่ อย่างไรก็ตาม โทเค็นที่ลงนามด้วยคีย์นี้ยังคงใช้งานได้
- ลบคีย์ก่อนหน้าของคุณ: คีย์ที่มีสถานะ "ก่อนหน้า" จะถูกเพิกถอนและลบออกจากตาราง
ห้ามหมุนคีย์สำหรับลงนามติดต่อกัน (สองครั้งขึ้นไป) เพราะอาจทำให้โทเค็นที่ออกไปแล้ว ทั้งหมด ใช้งานไม่ได้
- สำหรับผู้ใช้ OSS หลังจากหมุนคีย์สำหรับลงนามแล้ว ต้องรีสตาร์ท Logto instance เพื่อให้คีย์ใหม่มีผล
- สำหรับผู้ใช้ Cloud คีย์สำหรับลงนามใหม่จะมีผลทันทีหลังการหมุน แต่โปรดอย่าหมุนคีย์สำหรับลงนามหลายครั้งติดต่อกัน
แหล่งข้อมูลที่เกี่ยวข้อง
แนะนำอัลกอริทึม EC และ RSA สำหรับการลงนามใน JWT