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

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

MAC ของ JWT

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

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

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