אסימון JSON Web (JWT) הוא תקן אינטרנט פתוח שמשמש לאימות ולהרשאה של חילופי מידע בין לקוח לשרת. כשמשתמש באפליקציה נכנס בפעם הראשונה באמצעות פרטי הכניסה המתאימים לתפקיד, השרת יוצר ומחזיר אסימון JWT מקודד עם חתימה דיגיטלית לשימוש בבקשות הבאות. התהליך הזה מאמת את המשתמש ומעניק לו הרשאה לגשת למסלולים, לשירותים ולמשאבים על סמך תפקיד החשבון שלו.
בקריאות לשיטות API מסביבות עם רמת אמון נמוכה, מערכת Fleet Engine דורשת שימוש באסימוני JWT (JSON Web Tokens) בחתימה של חשבון שירות מתאים. סביבות עם רמת אמון נמוכה כוללות סמארטפונים ודפדפנים. אסימון JWT נוצר בשרת שלכם, שהוא סביבה מהימנה לחלוטין. ה-JWT נחתם, מוצפן ומוענק ללקוח לצורך אינטראקציות עתידיות עם השרת, עד שתוקף האסימון יפוג או שהוא כבר לא יהיה תקף.
הקצה העורפי צריך לבצע אימות והרשאה מול Fleet Engine באמצעות מנגנונים רגילים של Application Default Credentials. חשוב להשתמש באסימוני JWT שנחתמו על ידי חשבון שירות מתאים. רשימה של תפקידים בחשבונות שירות מופיעה במאמר תפקידים בחשבונות שירות של Fleet Engine בקטע יסודות של Fleet Engine.
לעומת זאת, הקצה העורפי צריך לבצע אימות והרשאה מול Fleet Engine באמצעות מנגנונים רגילים של Application Default Credentials.
בניגוד למפתחות API, אסימוני JWT הם לטווח קצר ומגבילים את הפעולות רק לאלה שהתפקיד מורשה לבצע. מידע נוסף על אסימוני JWT זמין במאמר JSON Web Tokens בוויקיפדיה. פרטים על תפקידים של הרשאות גישה מופיעים בקטע תפקידים של חשבונות שירות במדריך הזה.
רכיבי JWT
אסימוני JWT מכילים כותרת וקטע הצהרה. קטע הכותרת מכיל מידע כמו המפתח הפרטי שהתקבל מחשבונות השירות ואלגוריתם ההצפנה. הקטע של ההצהרה מכיל מידע כמו זמן היצירה של ה-JWT, משך החיים, השירותים שה-JWT מאשר גישה אליהם ומידע אחר לגבי הרשאות גישה ברמת ההיקף, למשל מזהה כלי התובלה.
בטבלה הבאה מפורטים פרטים תיאוריים על שדות JWT באופן כללי, וגם מידע ספציפי על המיקומים שבהם אפשר למצוא את הערכים של השדות האלה בפרויקט Fleet Engine Cloud.
שדה |
תיאור |
---|---|
alg |
האלגוריתם שבו צריך להשתמש. 'RS256'. |
typ |
סוג האסימון. 'JWT'. |
ילד |
מזהה המפתח הפרטי של חשבון השירות. הערך הזה מופיע בשדה |
שדה |
תיאור |
---|---|
iss |
כתובת האימייל של חשבון השירות, שנמצאת בשדה |
sub |
כתובת האימייל של חשבון השירות, שנמצאת בשדה |
aud |
|
iat |
חותמת הזמן שבה נוצר ה-JWT, שצוינה בשניות שחלפו מאז 00:00:00 |
exp |
חותמת הזמן של תאריך התפוגה של JWT, שצוינה בשניות שחלפו מאז |
הרשאה |
בהתאם לתרחיש לדוגמה, יכול להיות שהיא מכילה את הערכים אם מציינים מזהי משימות, היקף ההרשאה חייב להיות מערך באחת מהצורות הבאות: "taskids": ["task_id_one","task_id_two"]
או "taskids": ["*"] |
הצהרות JWT של Fleet Engine
ב-Fleet Engine נעשה שימוש בהצהרות בעלות פרטיות. שימוש בטענות נכונות (claims) פרטיות מבטיח שרק לקוחות מורשים יכולים לגשת לנתונים שלהם.
לדוגמה, כשהשרת מנפיק אסימון אינטרנט מסוג JSON למכשיר הנייד של הנהג, הוא צריך להכיל את ההצהרה vehicleid
או את ההצהרה deliveryvehicleid
עם הערך של מזהה הרכב של הנהג. לאחר מכן, בהתאם לתפקיד הנהג, האסימונים מאפשרים גישה רק למזהה הרכב הספציפי ולא למזהה רכב שרירותי אחר.
מערכת Fleet Engine משתמשת בהצהרות הפרטיות הבאות:
נסיעות על פי דרישה
-
vehicleid
:- טענת הנכונות הזו תמיד משמשת את Driver SDK, בין אם מדובר בנסיעה ובין אם ברכב. הקצה העורפי של Fleet Engine מוודא שהרכב משויך לנסיעה המבוקשת לפני ביצוע השינוי.
- ה-JWT יכול לכסות גם פעולות של כלי רכב וגם פעולות של נסיעה, גם אם לא נדרש, וכך לפשט את ההטמעה של החתימה על JWT.
-
tripid
:- טענת הנכונות הזו תמיד משמשת את Consumer SDK.
- ה-JWT יכול לכסות גם פעולות של כלי רכב וגם פעולות של נסיעות, גם אם לא נדרש, וכך לפשט את ההטמעה של החתימה על האסימון.
משימות מתוזמנות
-
deliveryvehicleid
משתמשים בזה כשקוראים לממשקי API לכל כלי מסירה.
-
taskid
משתמשים באפשרות הזו כשקוראים לממשקי API לכל משימה.
-
taskids
משתמשים בה כשקוראים ל-
BatchCreateTasksAPI
. ההצהרה הזו צריכה להיות בפורמט מערך, והמערך צריך להכיל את כל מזהי המשימות הנדרשים להשלמת הבקשה. אין לכלול הצהרותdelivervehicleid
,trackingid
אוtaskid
. -
trackingid
משתמשים בה כשקוראים לפונקציה
GetTaskTrackingInfoAPI
. ההצהרה צריכה להתאים למזהה המעקב בבקשה. אסור לכלול הצהרותdelivervehicleid
,taskid
אוtaskids
.
המאמרים הבאים
- כדי להבין את תהליך האימות המלא, כדאי לקרוא את המאמר תכנון האבטחה של Fleet Engine.
- איך מנפיקים אסימוני אינטרנט מסוג JSON מהשרת