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

במסמך הזה מוסבר איך להנפיק אסימוני JSON Web כחלק מהפעלת הגישה של האפליקציות לאינטרנט ולנייד לנתונים של Fleet Engine. אם לא עשית זאת אתם צריכים לקרוא כבר את JSON Web Tokens בקטע אבטחה ב-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. הספרייה מפשטת את הבנייה של Fleet Engine אסימוני JWT וחותמים עליהם באופן מאובטח. היא מספקת את הפרטים הבאים:

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

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

אם אתם לא יכולים להשתמש בספריית ההרשאות של Java, צריך להטמיע אסימוני JWT ב- Codebase משלכם. בקטע הזה מפורטות כמה הנחיות ליצירת משחקים משלכם. לאסימונים אישיים. רשימה של שדות וטענות נכונות (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 מוסבר איך להטמיע את האסימון הזה בצד הלקוח:

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

   {
      "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": "*"
       }
    }
  

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