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
สำหรับกรณีการใช้งานส่วนใหญ่