הנפקת אסימוני אינטרנט מסוג JSON

במסמך הזה נסביר איך להנפיק אסימוני JSON Web כחלק מהפעלת הגישה של האפליקציות לאינטרנט ולנייד לנתונים של Fleet Engine. אם עדיין לא עשיתם זאת, כדאי לקרוא את המאמר אסימוני JSON Web בקטע אבטחה ב-Fleet Engine. באמצעות השירות Fleet Engine, אפשר להנפיק אסימוני JWT באחת מהדרכים הבאות:

  • שימוש בספריית ההרשאות – Google ממליצה להשתמש בגישה הזו כשקוד הבסיס נכתב ב-Java. הספרייה הזו מטפלת בהנפקה של אסימוני JWT לכל התרחישים לדוגמה שבהם יכול להיות שתצטרכו להשתמש בשירות, ומפשטת מאוד את ההטמעה.
  • ליצור אסימוני JWT משלכם – אם אתם לא יכולים להשתמש בספריית ה-JWT שלנו, תצטרכו לבנות אותם בבסיס הקוד שלכם. בקטע הזה מפורטות דוגמאות שונות של JWT לכל תרחיש.

איך פועלים אסימוני JWT

בסביבות לא מהימנות, כמו טלפונים ניידים ודפדפני אינטרנט, שרת הקצה העורפי מנפיק אסימוני JWT שפועלים באופן הבא:

  • קוד הלקוח שפועל בסביבה עם רמת אמון נמוכה קורא לקוד השרת שפועל בסביבה עם רמת אמון מלאה, כדי לבקש את ה-JWT המתאים להעברה ל-Fleet Engine.

  • אסימוני JWT משויכים לחשבונות שירות, כך שהבקשות שנשלחות ל-Fleet Engine משויכות באופן משתמע לחשבון השירות שעליו נחתם ה-JWT.

  • הצהרות JWT מגבילות עוד יותר את המשאבים שהלקוח יכול להפעיל, כמו כלי רכב, נסיעות או משימות ספציפיים.

שימוש בספריית ההרשאות ל-Java

כדי להשתמש בספריית ההרשאות של Fleet Engine עבור Java, אפשר להיכנס למאגר ב-GitHub. הספרייה מפשטת את היצירה של אסימוני JWT ב-Fleet Engine ומחתימה עליהם בצורה מאובטחת. הוא מספק את האפשרויות הבאות:

  • הצהרות על יחסי תלות בפרויקטים
  • רשימה מלאה של כל התפקידים בחשבון השירות לנסיעות על פי דרישה או למשימות מתוזמנות
  • מנגנונים לחתימה על אסימונים מלבד שימוש בקובצי פרטי כניסה, כמו התחזות לחשבון שירות
  • הצמדת אסימונים חתומות לבקשות יוצאות שנשלחות מסטאב של gRPC או מספריית לקוח של Google API Codegen ‏ (GAPIC)
  • הוראות לשילוב הגורמים החתומים עם ספריות הלקוח של Fleet Engine

אם אתם מנפיקים JWTs מהקוד שלכם

אם אין לכם אפשרות להשתמש בספריית ההרשאות ל-Java, תצטרכו להטמיע אסימוני JWT בקוד הבסיסי שלכם. בקטע הזה מפורטות כמה הנחיות ליצירת אסימונים משלכם. רשימה של שדות וטענות נכונות (claims) של JWT מופיעה בקטע JSON Web Tokens בקטע אבטחה ב-Fleet Engine. במאמר תפקידים של חשבונות שירות מפורטים התפקידים של חשבונות השירות שבהם משתמש Fleet Engine. בקטע הבא מפורטות דוגמאות ל-JWT לנסיעות על פי דרישה או למשימות מתוזמנות.

הנחיות כלליות

  • שימוש בחשבונות שירות ובתפקידים מתאימים. חשבון השירות והתפקיד המשויך לו מבטיחים שהמשתמש שמבקש את האסימון מורשה להציג את המידע שהאסימון מעניק לו גישה אליו. באופן ספציפי:
    • אם חותמים על JWT כדי להעביר אותו למכשיר נייד, משתמשים בחשבון השירות בתפקיד Driver או Consumer SDK. אחרת, המכשיר הנייד יכול לשנות נתונים ולגשת אליהם, למרות שאין לו גישה אליהם.
    • אם חותמים על JWT לשימוש בקריאות עם הרשאות, צריך להשתמש בחשבון השירות עם התפקיד הנכון של אדמין ב-Fleet Engine כשמשתמשים ב-ADC או ב-JWT. אחרת, הפעולה נכשלת.
  • שתפו רק את האסימונים שנוצרו. לעולם אל תשתפו את פרטי הכניסה ששימשו ליצירת האסימונים.
  • בקריאות gRPC, המנגנון להצמדת האסימון תלוי בשפה ובמסגרת שבהן נעשה שימוש כדי לבצע את הקריאה. המנגנון לציון אסימון בקריאת HTTP הוא הוספת כותרת Authorization עם אסימון למוכ"ז שהערך שלו הוא האסימון.
  • החזרת מועד תפוגה השרת צריך להחזיר את זמן התפוגה של האסימון, בדרך כלל בשניות.
  • אם אתם צריכים ליצור ולחתום על קובץ JSON ישירות כבעלים של אסימון, במקום להשתמש באסימוני גישה מסוג OAuth 2.0, תוכלו לעיין בהוראות להרשאה לחשבון שירות ללא OAuth במסמכי העזרה למפתחי זהויות.

לנסיעות על פי דרישה

  • כשיוצרים את עומס העבודה של JWT, מוסיפים הצהרה נוספת בקטע ההרשאה עם המפתח vehicleid או tripid שמוגדר לערך של מזהה הרכב או מזהה הנסיעה שבשבילם מתבצעת הקריאה.

למשימות מתוזמנות

  • כשהשרת קורא לממשקי API אחרים, האסימונים חייבים לכלול גם את ההצהרה המתאימה. כדי לעשות זאת, אפשר לבצע את הפעולות הבאות:
    • מגדירים את הערך של כל מפתח ל-*.
    • מעניקים למשתמש גישה לכל taskids ו-deliveryvehicleids. כדי לעשות זאת, מוסיפים הצהרה נוספת בקטע ההרשאה עם המפתחות taskid ו-deliveryvehicleid.
    • כשמשתמשים באסימון הכוכב (*) בהצהרה taskids, הוא חייב להיות האלמנט היחיד במערך.

דוגמאות ל-JWT לנסיעות על פי דרישה

בקטע הזה מפורטות דוגמאות ל-JWT בתרחישים נפוצים לשימוש בנסיעות על פי דרישה.

אסימון לדוגמה לפעולה באפליקציית נהג

{
  "alg": "RS256",
  "typ": "JWT",
  "kid": "private_key_id_of_driver_service_account"
}
.
{
  "iss": "driver@yourgcpproject.iam.gserviceaccount.com",
  "sub": "driver@yourgcpproject.iam.gserviceaccount.com",
  "aud": "https://fleetengine.googleapis.com/",
  "iat": 1511900000,
  "exp": 1511903600,
  "authorization": {
     "vehicleid": "driver_12345"
   }
}

דוגמה לאסימון של פעולה באפליקציית צרכן

{
  "alg": "RS256",
  "typ": "JWT",
  "kid": "private_key_id_of_consumer_service_account"
}
.
{
  "iss": "consumer@yourgcpproject.iam.gserviceaccount.com",
  "sub": "consumer@yourgcpproject.iam.gserviceaccount.com",
  "aud": "https://fleetengine.googleapis.com/",
  "iat": 1511900000,
  "exp": 1511903600,
  "authorization": {
     "tripid": "trip_54321"
   }
}

דוגמאות ל-JWT למשימות מתוזמנות

בקטע הזה מופיעה דוגמה ל-JWT בתרחישים אופייניים לשימוש במשימות מתוזמנות.

אסימון לדוגמה לאפליקציית נהיגה

    {
      "alg": "RS256",
      "typ": "JWT",
      "kid": "private_key_id_of_delivery_driver_service_account"
    }
    .
    {
      "iss": "driver@yourgcpproject.iam.gserviceaccount.com",
      "sub": "driver@yourgcpproject.iam.gserviceaccount.com",
      "aud": "https://fleetengine.googleapis.com/",
      "iat": 1511900000,
      "exp": 1511903600,
      "authorization": {
         "deliveryvehicleid": "driver_12345"
       }
    }

דוגמה לטוקן של אפליקציית צרכן

    {
      "alg": "RS256",
      "typ": "JWT",
      "kid": "private_key_id_of_delivery_consumer_service_account"
    }
    .
    {
      "iss": "consumer@yourgcpproject.iam.gserviceaccount.com",
      "sub": "consumer@yourgcpproject.iam.gserviceaccount.com",
      "aud": "https://fleetengine.googleapis.com/",
      "iat": 1511900000,
      "exp": 1511903600,
      "authorization": {
         "trackingid": "shipment_12345"
       }
    }

דוגמאות ל-JWT לפעולות בצי

בקטע הזה מוצגת דוגמה ל-JWT בתרחיש אופייני בתפעול של ציי רכבים.

אסימון לדוגמה למעקב אחרי כל המשימות והרכבים בצי

הדוגמה הבאה היא אסימון שמאפשר לעקוב אחרי כל המשימות והרכבים בצי מאפליקציה מבוססת-אינטרנט שמשמשת את המפעיל. ההרשאות הנדרשות לביצוע הפעולות האלה הן יותר מאלו שנדרשות לאפליקציות לקוח. במאמר הגדרת ספריית המעקב אחר ציי רכבים ב-JavaScript מוסבר איך להטמיע את האסימון הזה בצד הלקוח:

  • חותמים על האסימון באמצעות התפקיד Fleet Engine Delivery Fleet Reader ב-Cloud IAM.

   {
      "alg": "RS256",
      "typ": "JWT",
      "kid": "private_key_id_of_consumer_service_account"
    }
    .
    {
      "iss": "superuser@yourgcpproject.iam.gserviceaccount.com",
      "sub": "superuser@yourgcpproject.iam.gserviceaccount.com",
      "aud": "https://fleetengine.googleapis.com/",
      "iat": 1511900000,
      "exp": 1511903600,
      "scope": "https://www.googleapis.com/auth/xapi",
      "authorization": {
         "taskid": "*",
         "deliveryvehicleid": "*",
       }
    }

שיטת אימות חלופית לפעולות שרת לקצה העורפי

Google ממליצה להשתמש ב-ADC כדי לאמת את פעולות השרת בקצה העורפי. אם אתם לא יכולים להשתמש ב-ADC ואתם צריכים להשתמש באסימוני JWT, תוכלו להיעזר בדוגמאות הבאות.

דוגמה לאסימון לפעולה של שרת לקצה העורפי על פי דרישה

  {
    "alg": "RS256",
    "typ": "JWT",
    "kid": "private_key_id_of_provider_service_account"
  }

  {
    "iss": "provider@yourgcpproject.iam.gserviceaccount.com",
    "sub": "provider@yourgcpproject.iam.gserviceaccount.com",
    "aud": "https://fleetengine.googleapis.com/",
    "iat": 1511900000,
    "exp": 1511903600,
    "authorization": {
       "vehicleid": "*",
       "tripid": "*"
     }
  }
  

דוגמה לטוקן של פעולת שרת מתוזמנת בקצה העורפי

    {
      "alg": "RS256",
      "typ": "JWT",
      "kid": "private_key_id_of_provider_service_account"
    }
    .
    {
      "iss": "provider@yourgcpproject.iam.gserviceaccount.com",
      "sub": "provider@yourgcpproject.iam.gserviceaccount.com",
      "aud": "https://fleetengine.googleapis.com/",
      "iat": 1511900000,
      "exp": 1511903600,
      "authorization": {
         "taskid": "*"
       }
    }
   

דוגמה לאסימון לפעולה מתוזמנת של יצירת משימות באצווה בשרת לקצה העורפי

    {
      "alg": "RS256",
      "typ": "JWT",
      "kid": "private_key_id_of_provider_service_account"
    }
    .
    {
      "iss": "provider@yourgcpproject.iam.gserviceaccount.com",
      "sub": "provider@yourgcpproject.iam.gserviceaccount.com",
      "aud": "https://fleetengine.googleapis.com/",
      "iat": 1511900000,
      "exp": 1511903600,
      "authorization": {
         "taskids": ["*"]
       }
    }
  

דוגמה לאסימון של שרת לקצה העורפי לתזמון פעולות לכל כלי מסירה

    {
      "alg": "RS256",
      "typ": "JWT",
      "kid": "private_key_id_of_provider_service_account"
    }
    .
    {
      "iss": "provider@yourgcpproject.iam.gserviceaccount.com",
      "sub": "provider@yourgcpproject.iam.gserviceaccount.com",
      "aud": "https://fleetengine.googleapis.com/",
      "iat": 1511900000,
      "exp": 1511903600,
      "authorization": {
         "deliveryvehicleid": "*"
       }
    }
  

המאמרים הבאים