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

‫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

אם אסימונים נוצרים ומאומתים על ידי ישויות שונות, צריך להשתמש במפתחות אסימטריים עם הפרימיטיבים 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 ברוב תרחישי השימוש.

תרחישים לדוגמה

רוצה ליצור ולאמת JWT?