คีย์สำหรับลงนาม
OIDC signing keys ของ Logto หรือที่รู้จักกันในชื่อ "OIDC private keys" และ "OIDC cookie keys" คือคีย์สำหรับลงนามที่ใช้ในการลงนาม JWTs (โทเค็นการเข้าถึง (Access tokens) และ โทเค็น ID (ID tokens)) และคุกกี้ของเบราว์เซอร์ใน เซสชันการลงชื่อเข้าใช้ (sign-in sessions) ของ Logto คีย์สำหรับลงนามเหล่านี้จะถูกสร้างขึ้นเมื่อมีการ seed ฐานข้อมูล Logto (โอเพ่นซอร์ส) หรือสร้าง tenant ใหม่ (Cloud) และสามารถจัดการได้ผ่าน CLI (โอเพ่นซอร์ส), Management APIs หรือ Console UI
โดยปกติ Logto จะใช้ อัลกอริทึม elliptic curve (EC) ในการสร้างลายเซ็นดิจิทัล อย่างไรก็ตาม เนื่องจากผู้ใช้มักต้องตรวจสอบลายเซ็นของ JWT และเครื่องมือรุ่นเก่าหลายตัวไม่รองรับอัลกอริทึม EC (รองรับเฉพาะ RSA) เราจึงได้เพิ่มฟีเจอร์สำหรับการหมุนเวียนคีย์ส่วนตัว (private key rotation) และให้ผู้ใช้เลือกอัลกอริทึมสำหรับลายเซ็น (ทั้ง 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 > คีย์สำหรับลงนาม จากนั้นคุณสามารถจัดการทั้ง OIDC private keys และ OIDC cookie keys ได้
-
หากต้องการหมุนเวียนคีย์สำหรับลงนาม ให้คลิกปุ่ม "Rotate private keys" หรือ "Rotate cookie keys" เมื่อหมุนเวียนคีย์ส่วนตัว คุณสามารถเลือกอัลกอริทึมสำหรับลายเซ็นได้
-
คุณจะพบตารางที่แสดงคีย์สำหรับลงนามทั้งหมดที่ใช้งานอยู่ หมายเหตุ: คุณสามารถลบคีย์ก่อนหน้าได้ แต่ไม่สามารถลบคีย์ปัจจุบันได้
สถานะ คำอธิบาย ปัจจุบัน หมายถึงคีย์นี้กำลังถูกใช้งานอยู่ในแอปพลิเคชันและ API ของคุณ ก่อนหน้า หมายถึงคีย์ที่เคยใช้งานมาก่อนแต่ถูกหมุนเวียนออกไปแล้ว โทเค็นที่ลงนามด้วยคีย์นี้ยังคงใช้งานได้ตามปกติ
โปรดจำไว้ว่าการหมุนเวียนคีย์ประกอบด้วย 3 ขั้นตอนดังนี้:
- สร้างคีย์สำหรับลงนามใหม่: ซึ่งจะทำให้ แอปพลิเคชัน และ API ทั้งหมดของคุณต้องใช้คีย์สำหรับลงนามใหม่นี้
- หมุนเวียนคีย์ปัจจุบัน: คีย์ที่ใช้งานอยู่จะถูกกำหนดสถานะเป็น "ก่อนหน้า" หลังการหมุนเวียน และจะไม่ถูกใช้กับแอปพลิเคชันและ API ที่สร้างใหม่ อย่างไรก็ตาม โทเค็นที่ลงนามด้วยคีย์นี้ยังคงใช้งานได้
- ลบคีย์ก่อนหน้าของคุณ: คีย์ที่มีสถานะ "ก่อนหน้า" จะถูกเพิกถอนและลบออกจากตาราง
อย่าหมุนเวียนคีย์สำหรับลงนามติดต่อกัน (สองครั้งขึ้นไป) เพราะอาจทำให้โทเค็นที่ออกทั้งหมดไม่สามารถใช้งานได้
- สำหรับผู้ใช้ OSS หลังจากหมุนเวียนคีย์สำหรับลงนามแล้ว ต้องรีสตาร์ท Logto instance เพื่อให้คีย์ใหม่มีผล
- สำหรับผู้ใช้ Cloud คีย์สำหรับลงนามใหม่จะมีผลทันทีหลังการหมุนเวียน แต่โปรดตรวจสอบว่าไม่ได้หมุนเวียนคีย์สำหรับลงนามติดต่อกันหลายครั้ง
แหล่งข้อมูลที่เกี่ยวข้อง
แนะนำอัลกอริทึมการลงนาม EC และ RSA ใน JWT