JSON Web Token (JWT)

Tink รองรับการสร้างและยืนยัน JWT ซึ่งเป็นมาตรฐานที่ใช้กันอย่างแพร่หลายบนเว็บ การใช้งาน JWT ของ Tink มีชุดย่อยของมาตรฐาน JWT ที่กำหนดไว้ใน RFC 7519 ซึ่งทีม Tink เห็นว่าปลอดภัยที่จะใช้ และ เข้ากันได้ดีกับไลบรารี Tink

Tink ไม่รองรับส่วนของมาตรฐานที่แทบไม่ได้ใช้หรือใช้งานได้อย่างถูกต้องยาก โดยมีข้อจำกัดดังนี้

  • Tink รองรับเฉพาะรูปแบบ JWS Compact Serialization การทำให้ JWS เป็น JSON และ JWE ไม่ได้รับการรองรับ
  • Tink ไม่รองรับค่า None ในส่วนหัว alg
  • Tink รองรับเฉพาะส่วนหัว typ, alg และ kid ระบบไม่รองรับส่วนหัวอื่นๆ ทั้งหมด
  • Tink ไม่อนุญาตให้แยกวิเคราะห์โทเค็นก่อนที่จะยืนยันลายเซ็นหรือ MAC

JWT ที่มีลายเซ็น

หากโทเค็นสร้างและยืนยันโดยเอนทิตีที่แตกต่างกัน คุณควรใช้ คีย์แบบอสมมาตรกับ Primitive JwtPublicKeySign และ JwtPublicKeyVerify ระบบจะใช้คีย์ส่วนตัวเพื่อสร้างโทเค็น และใช้คีย์สาธารณะเพื่อยืนยันโทเค็น อัลกอริทึมที่รองรับโดยองค์ประกอบพื้นฐานเหล่านี้ ได้แก่ ES256, ES384, ES512, RS256, RS384, RS512, PS256, PS384 และ PS512

เลือกประเภทคีย์

ลายเซ็น JWT ใช้คีย์ประเภทอื่นที่ไม่ใช่ลายเซ็นดิจิทัลปกติใน Tink เนื่องจากข้อมูลเมตาบางรายการ (เช่น algและ kid) ต้องจัดเก็บไว้กับคีย์

เราขอแนะนำให้ใช้ JWT_ES256 สำหรับกรณีการใช้งานส่วนใหญ่ โทเค็นที่สร้างด้วย คีย์ประเภทนี้จะมีส่วนหัว kid เสมอ หากต้องการโทเค็นที่สั้นลงเล็กน้อย โดยไม่มีส่วนหัว kid ให้เลือกประเภทคีย์ JWT_ES256_RAW ดูคีย์ทุกประเภทที่รองรับได้ที่ประเภทคีย์ที่รองรับ

การกระจายชุดคีย์สาธารณะ

Tink อนุญาตให้แปลงชุดคีย์สาธารณะเป็นและจากรูปแบบชุด JWK ที่กำหนดไว้ใน RFC 7517 ซึ่งไลบรารี JWT ส่วนใหญ่เข้าใจ

Tink ไม่รองรับการส่งออกคีย์สาธารณะของ JWT ในรูปแบบอื่นๆ เหตุผล คือรูปแบบอื่นๆ ไม่มีข้อมูลเมตา alg และ kid ที่จะ ใช้ในการยืนยัน ซึ่งทำให้การใช้รูปแบบเหล่านั้นมีโอกาสเกิดข้อผิดพลาดมากขึ้นและอาจทำให้ การหมุนเวียนคีย์ทำได้ยากขึ้น

เราขอแนะนำให้คุณไม่เพียงแชร์ชุดคีย์สาธารณะเพียงครั้งเดียว แต่ควรมีวิธีอัปเดตชุดคีย์สาธารณะโดยอัตโนมัติ (หากไม่ทำ การเปลี่ยนไปใช้คีย์ใหม่จะทำได้ยากมาก) โดยมักจะทำด้วยการเผยแพร่ชุดคีย์สาธารณะใน URL ที่เชื่อถือได้และปลอดภัย จากนั้นเซิร์ฟเวอร์ที่ยืนยันโทเค็นจะต้องดึงข้อมูลชุดคีย์สาธารณะจาก URL นั้นเป็นระยะๆ เช่น วันละครั้ง หากต้องการหมุนเวียนคีย์ คุณต้องเพิ่มคีย์สาธารณะใหม่ลงในชุดคีย์สาธารณะอย่างน้อย 1 วันก่อน ที่จะใช้คีย์ดังกล่าวเพื่อลงชื่อโทเค็น ไม่เช่นนั้น เซิร์ฟเวอร์ที่ยังใช้ชุดคีย์สาธารณะเดิมจะปฏิเสธโทเค็นใหม่ที่ลงนามด้วยคีย์ส่วนตัวใหม่

ตัวอย่าง Use Case

ดูฉันต้องการสร้างและยืนยัน JWT ด้วย ลายเซ็น

JWT ที่มี MAC

Tink รองรับ JWT ที่มีคีย์สมมาตรพร้อม Primitive JwtMac ใช้ Primitive นี้ก็ต่อเมื่อโทเค็นสร้างและยืนยันโดยเอนทิตีเดียวกัน อัลกอริทึมที่รองรับโดย Primitive นี้คือ HS256, HS384 และ HS512

เลือกประเภทคีย์

ประเภทคีย์ JWT MAC จะแตกต่างจากประเภทคีย์ MAC ปกติ เราขอแนะนำให้ใช้ JWT_HS256 สำหรับ Use Case ส่วนใหญ่