JSON Web Token (JWT)

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

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

  • Tink รองรับเฉพาะรูปแบบ JWS Compact Serialization ไม่รองรับ JWS JSON Serialization และ 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 วันก่อน ที่จะใช้ลงนามในโทเค็น ไม่เช่นนั้น เซิร์ฟเวอร์ที่ยังใช้ชุดคีย์สาธารณะเดิมจะปฏิเสธโทเค็นใหม่ที่ลงนามด้วยคีย์ส่วนตัวใหม่

JWT MAC

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

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

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

ตัวอย่าง Use Case

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