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