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

במאמר הזה מוסבר איך להנפיק אסימוני אינטרנט מסוג JSON כחלק מהפעלת הגישה של האפליקציות לאינטרנט ולנייד לנתונים של 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 stub או מספריית לקוח של Google API Codegen ‏ (GAPIC)
  • הוראות לשילוב החותמים עם ספריות הלקוח של Fleet Engine

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

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

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

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

לנסיעות מתי שנוח

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

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

  • כשהשרת קורא לממשקי API אחרים, האסימונים צריכים להכיל גם את ההצהרה המתאימה. כדי לעשות את זה, אתם יכולים:
    • מגדירים את הערך של כל מפתח בתור *.
    • נותנים למשתמש גישה לכל taskids ו-deliveryvehicleids. כדי לעשות את זה, מוסיפים עוד הצהרה בקטע ההרשאה עם המפתחות taskid ו-deliveryvehicleid.
    • כשמשתמשים בכוכבית (*) ב-claim‏ 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": "*"
       }
    }
  

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