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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

בקטע הזה מוצגות דוגמאות ל-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_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_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": "*"
       }
    }

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

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

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

הדוגמה הבאה היא אסימון שעוקב אחרי כל המשימות של כלל הרכבים בצי. מידע נוסף זמין במאמר הגדרת הספרייה למעקב של Fleet 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": "*",
       }
    }

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

  • צריך לאמת את ההגדרה כדי ליצור רכב לניסיון ולוודא האסימונים פועלים כמו שצריך