קבלת אסימוני הרשאה

מה זה אסימון?

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

הקצה העורפי צריך לבצע אימות והרשאה מול Fleet Engine באמצעות מנגנונים רגילים של Application Default Credentials. חשוב להשתמש באסימוני JWT שנחתמו על ידי חשבון שירות מתאים. לרשימת התפקידים של חשבונות השירות, ראו תפקידי חשבון השירות של Fleet Engine בקטע יסודות של Fleet Engine.

לעומת זאת, הקצה העורפי צריך לבצע אימות ואישור מול Fleet Engine באמצעות מנגנונים רגילים של Application Default Credentials.

למידע נוסף על אסימוני JSON Web, ראו JSON Web Tokens בקטע יסודות של Fleet Engine.

איך לקוחות מקבלים אסימונים?

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

כמפתחים, הטמעת הלקוח אמורה לספק את היכולת לבצע את הפעולות הבאות:

  • אחזור אסימון רשת מבוסס JSON מהשרת.
  • כדי למזער את פעולות הרענון של האסימון, משתמשים שוב באסימון עד שהתוקף שלו יפוג.
  • מרעננים את הטוקן כשפג התוקף שלו.

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

במאמר הנפקת אסימוני אינטרנט JSON עם Fleet Engine תוכלו לקרוא פרטים נוספים על האסימונים הצפויים משירות Fleet Engine.

דוגמה למאחזר של אסימון הרשאה

לפניכם הטמעה של AuthTokenFactory:

class JsonAuthTokenFactory implements AuthTokenFactory {
  private String vehicleServiceToken;  // initially null
  private long expiryTimeMs = 0;
  private String vehicleId;

  // This method is called on a thread whose only responsibility is to send
  // location updates. Blocking is OK, but just know that no location updates
  // can occur until this method returns.
  @Override
  public String getToken(AuthTokenContext authTokenContext) {
    String vehicleId = requireNonNull(context.getVehicleId());

    if (System.currentTimeMillis() > expiryTimeMs || !vehicleId.equals(this.vehicleId)) {
      // The token has expired, go get a new one.
      fetchNewToken(vehicleId);
    }

    return vehicleServiceToken;
  }

  private void fetchNewToken(String vehicleId) {
    String url = "https://yourauthserver.example/token/" + vehicleId;

    try (Reader r = new InputStreamReader(new URL(url).openStream())) {
      com.google.gson.JsonObject obj
          = com.google.gson.JsonParser.parseReader(r).getAsJsonObject();
      vehicleServiceToken = obj.get("VehicleServiceToken").getAsString();
      expiryTimeMs = obj.get("TokenExpiryMs").getAsLong();

      // The expiry time could be an hour from now, but just to try and avoid
      // passing expired tokens, we subtract 10 minutes from that time.
      expiryTimeMs -= 10 * 60 * 1000;
      this.vehicleId = vehicleId;
    } catch (IOException e) {
      // It's OK to throw exceptions here. The StatusListener you passed to
      // create the DriverContext class will be notified and passed along the failed
      // update warning.
      throw new RuntimeException("Could not get auth token", e);
    }
  }
}

ההטמעה הספציפית הזו משתמשת בלקוח ה-HTTP המובנה ב-Java כדי לאחזר אסימון בפורמט JSON משרת ההרשאות. הלקוח שומר את האסימון לשימוש חוזר ומאחזר אותו מחדש אם פג התוקף של האסימון הישן תוך 10 דקות.

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

למידע על ספריות הלקוח הזמינות של Fleet Engine, ראו ספריות לקוח לשירותי משימות מתוזמנות.

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

איך מפעילים את Driver SDK