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 ส่วนใหญ่