מה זה JWT?
JWT, ראשי תיבות של JSON Web Token, הוא תקן פתוח (RFC 7519) המגדיר דרך קומפקטית ועצמאית
להעברת מידע מאובטח בין הצדדים כאובייקט JSON.
ניתן לאמת מידע זה ולסמוך עליו מכיוון שהוא חתום דיגיטלית.
ניתן לחתום על JWT באמצעות סוד (עם אלגוריתם HMAC) או זוג מפתחות ציבורי/פרטי באמצעות RSA או ECDSA.
המבנה של JWT מחולק לשלושה חלקים, מופרדים על ידי נקודות (.), שהם:
כותרת: הכותרת מורכבת משני חלקים: סוג האסימון, שהוא JWT, ואלגוריתם החתימה שבו נעשה שימוש,
כגון HMAC SHA256 או RSA.
מטען: המטען מכיל את התביעות. תביעות הן הצהרות על ישות (המשתמש) ונתונים נוספים.
ישנם שלושה סוגי תביעות: תביעות רשומות, ציבוריות ופרטיות.
תביעות רשומות הן קבוצה של תביעות מוגדרות מראש שאינן חובה אך מומלצות, שנועדו לספק קבוצה של תביעות שימושיות
הניתנות להפעלה הדדית.
תביעות ציבוריות יכולות להיות מוגדרות כרצונן על ידי אלה המשתמשים ב-JWT.
תביעות פרטיות משמשות לשיתוף מידע בין צדדים המסכימים להשתמש בהן ואינן תביעות רשומות או ציבוריות.
חתימה: כדי ליצור את חלק החתימה, עליך לקחת את הכותרת המקודדת, את המטען המקודד, סוד, את האלגוריתם שצוין בכותרת ולחתום על כך.
לדוגמה, בתרחיש שבו נדרש אימות, כאשר המשתמש מתחבר, השרת יוצר JWT ושולח אותו בחזרה למשתמש.
לאחר מכן המשתמש יכול להשתמש באסימון זה כדי לגשת למשאבים מוגנים על ידי הכללתו בכותרת ההרשאה של בקשות HTTP.
לאחר מכן השרת יאמת את האסימון וימשיך בהתאם.
JWT נפוצים ביישומי אינטרנט עבור אימות והרשאה של משתמשים, אבטחת API, ובמקרים מסוימים, חילופי מידע,
בשל יכולתם לשאת מידע בצורה מאובטחת.
למה JWT משמש?
JWT משמשים ביישומי אינטרנט למספר מטרות:
אימות: JWT משמשים לרוב עבור אימות.
לאחר שמשתמש מתחבר, השרת יוצר JWT עבור אותו משתמש, אשר מאוחסן לאחר מכן בצד הלקוח (באחסון מקומי)
ונכלל בכותרת של בקשות עתידיות.
זה מאפשר למשתמש לגשת למסלולים, שירותים ומשאבים המותרים עם האסימון הזה.
הרשאה: לאחר שהמשתמש מחובר וזהותו אושרה על ידי האפליקציה, ניתן להשתמש ב-JWT כדי להעניק לו גישה למשאבים ספציפיים.
זה שימושי ליישום רמות הרשאה לגישה לחלקים שונים של יישום.
חילופי מידע: JWT הם דרך טובה להעביר מידע בצורה מאובטחת בין הצדדים.
מכיוון שניתן לחתום על JWTs – למשל, באמצעות צמדי מפתחות ציבוריים/פרטיים – אתה יכול להיות בטוח שהשולחים הם מי שהם
אומרים שהם והמידע לא השתנה.
מי זקוק ל-JWT?
JWT נחוצים בעיקר ליישומים הדורשים אמצעים מאובטחים ויעילים להעברת מידע בין צדדים או רכיבים ברשת מבוזרת או בסביבת יישומי אינטרנט.
להלן כמה מקבוצות המפתח או התרחישים שבהם JWT שימושיים במיוחד:
מפתחי אפליקציות אינטרנט: למפתחים שבונים אפליקציות, במיוחד יישומי עמוד בודדים, JWT מציעים דרך לטפל באימות
והרשאות משתמשים ללא צורך בניהול הפעלה מורכב.
ניתן לאחסן JWT בדפדפן ולשלוח עם כל בקשה לגישה למסלולים או משאבים מוגנים.
מפתחי אפליקציות מובייל: בדומה ליישומי אינטרנט, גם אפליקציות מובייל נהנות מ-JWT לצורך אימות והרשאה.
JWT מספקים שיטה קלת משקל לשמירה על מצב משתמש והרשאות על פני בקשות ללא שאילתות שרת קבועות.
ספקי API: עבור שירותים המציעים ממשקי API, פרוטוקולי JWT הם שיטה לאבטחה ולניהול גישה.
ספקי API יכולים להשתמש ב-JWT כדי לאמת ולאשר קריאות API, כדי להבטיח שלמתקשר יש את ההרשאות הנכונות לגשת למשאבים.
ארכיטקטורות מיקרו-שירותים: בארכיטקטורת מיקרו-שירותים, ייתכן שרכיבים שונים של יישום יצטרכו לתקשר בצורה מאובטחת
ולאמת את זהויות זה של זה.
JWT מקלים על כך בכך שהם מאפשרים לשירותים לטעון ולאמת טענות לגבי זהותם באופן חסר מדינה.
מערכות ארגוניות: מערכות ארגוניות גדולות הדורשות הפצת זהות מאובטחת בין יישומים ושירותים שונים יכולות להשתמש ב-JWT.
JWT עוזרים בפישוט אימות והרשאה בין תחומים ללא צימוד ישיר בין רכיבים.
יישומי IoT: בתרחישי IoT שבהם מכשירים צריכים לתקשר בצורה מאובטחת עם שרתים או מכשירים אחרים, ניתן להשתמש ב-JWT
כדי לאמת זהויות של מכשירים ולהצפין הודעות, תוך הבטחת תקשורת מאובטחת ויעילה.
שירותי כניסה יחידה: JWT מועסקים גם בפתרונות כניסה יחידה (SSO) שבהם משתמשים נכנסים פעם אחת ומקבלים גישה למספר
מערכות מבלי להתבקש להיכנס שוב בכל אחת מהן.
JWT מסייעים בהפצה מאובטחת של מצב האימות על פני תחומים שונים.
ההבדלים בין JWT, JWE, JWS
JWT, JWE ו-JWS הם רכיבים של מסגרת JOSE, המספקת דרך סטנדרטית להעביר מידע בצורה מאובטחת בין צדדים
באמצעות אובייקטי JSON.
כל אחד מהם משרת מטרה נפרדת במסגרת של אבטחת אינטרנט ושלמות נתונים.
JWT: משמש לייצוג תביעות בצורה מאובטחת בין שני צדדים. אידיאלי עבור אסימוני אימות וחילופי מידע כאשר הצפנה
של המטען אינה נדרשת בהכרח.
JWS: מתמקד בהבטחת שלמות ואותנטיות הנתונים באמצעות חתימות דיגיטליות.
זה שימושי כאשר יש צורך לוודא שהנתונים לא טופלו במהלך השידור.
JWE: מבטיח את סודיות הנתונים באמצעות הצפנה.
הוא משמש כאשר המטען מכיל מידע רגיש שאסור להיחשף בפני גורמים לא מורשים.
JWT (אסימון אינטרנט של JSON)
JWT הוא אמצעי קומפקטי, בטוח בכתובות אתרים, לייצוג תביעות שיועברו בין שני צדדים.
התביעות ב-JWT מקודדות כאובייקט JSON המשמש כמטען של מבנה JWS או כטקסט רגיל של מבנה JWE, מה שמאפשר חתימה דיגיטלית
או הגנה על התביעות באמצעות קוד אימות הודעות (MAC) ו / או מוצפן.
JWT משמשים בעיקר לאימות וחילופי מידע.
האסימון מורכב משלושה חלקים: כותרת, מטען (המכיל את הטענות) וחתימה.
הכותרת מציינת את סוג האסימון (JWT) ואת האלגוריתם המשמש עבור החתימה או ההצפנה.
המטען מכיל את התביעות, שהן הצהרות על ישות (המשתמש) ומטא נתונים נוספים.
החתימה מבטיחה שהאסימון לא השתנה לאחר הנפקתו.
JWS (חתימת אינטרנט JSON)
JWS הוא תקן לאספקת חתימות דיגיטליות או MAC על תוכן באמצעות מבני נתונים מבוססי JSON.
מטרת JWS היא להבטיח את שלמות הנתונים ואת האותנטיות של נתוני ה-JSON המועברים.
אסימון JWS דומה במבנהו ל-JWT, מכיוון שהוא מורכב מכותרת, מטען וחתימה.
ההבדל טמון במיקוד; JWS עוסק במיוחד בחתימה על נתונים כדי לאמת את תקינותם ואמיתותם,
מבלי לרמוז בהכרח על הצפנה של המטען.
התהליך כולל לקיחת הכותרת והמטען המקודד, ושימוש באלגוריתם המצוין בכותרת, יחד עם זוג מפתחות סודי
או ציבורי/פרטי, כדי ליצור את החתימה.
חתימה זו מתווספת לאסימון, ומאפשרת למקלט לאמת את שלמות הנתונים על ידי חישוב מחדש של החתימה בקצה שלהם.
JWE
JWE הוא תקן להצפנת תוכן במבנה נתונים מבוסס JSON.
המטרה של JWE היא להבטיח את סודיות המידע המועבר.
אסימון JWE עוטף תוכן מוצפן, מה שהופך אותו לבלתי קריא לגורמים ללא המפתח המתאים לפענוח המידע.
זה שימושי במיוחד עבור נתונים רגישים שצריכים להיות מועברים בצורה מאובטחת בין הצדדים.
JWE מורכב מחמישה חלקים: כותרת ראשית, מפתח מוצפן (אם נעשה שימוש באלגוריתם הצפנת מפתח), וקטור אתחול,
טקסט צופן (המטען המוצפן), ותג אימות.
הכותרת מציינת את האלגוריתמים המשמשים להצפנה ויכולה לכלול גם פרמטרים נוספים, כמו סוג האסימון והנמען המיועד.

