אסימוני JWT (JSON Web Tokens)

ב-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 Sets המוגדר ב-RFC 7517, שרוב ספריות JWT מבינות.

ב-Tink לא ניתן לייצא מפתחות JWT ציבוריים בפורמט אחר. הסיבה לכך היא שפורמטים אחרים לא מכילים את המטא-נתונים alg ואת kid שבהם צריך להשתמש בתהליך האימות, מה שגורם לשימוש בהם להיות מועדוני יותר לשגיאות ועלול להקשות על רוטציית המפתחות.

עדיף לא רק לשתף את קבוצת המפתחות הציבורית פעם אחת, אלא גם לספק דרך אוטומטית לעדכן את מערך המפתחות הציבורי. (אם לא, מאוד קשה לעשות רוטציה למפתח חדש). לרוב עושים את זה על ידי פרסום של קבוצת המפתחות הציבורית בכתובת URL מהימנה ומאובטחת. שרת שמאמת אסימונים, צריך פשוט לאחזר מחדש מדי פעם את מערך המפתחות הציבורי מאותה כתובת URL, לדוגמה פעם ביום. כדי לבצע רוטציה של המפתח, צריך להוסיף את המפתח הציבורי החדש למערך המפתחות הציבורי לפחות יום אחד לפני שהוא משמש לחתימה על אסימונים. אחרת, האסימונים החדשים שנחתמים באמצעות המפתח הפרטי החדש יידחו על ידי שרתים שעדיין משתמשים בערכת המפתחות הציבורית הישנה.

JWT MAC

ספריית Tink תומכת גם ב-JWT עם מפתחות סימטריים עם JwtMac הפרמיטיבי. צריך להשתמש בפרימיטיב הזה רק אם האסימונים נוצרים ומאומתים על ידי אותה ישות. האלגוריתמים הנתמכים על ידי הפרימיטיב הזה הם HS256, HS384 ו-HS512.

בחירת סוג מפתח

הסוגים של מפתחות JWT MAC שונים מאלה של מפתחות ה-MAC הרגילים. ברוב התרחישים לדוגמה, מומלץ להשתמש ב-JWT_HS256.