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

מהו אסימון?

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

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

פרטי המפתח

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

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

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

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

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

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

פרטים על האסימונים ששירות Fleet Engine מצפה להם מפורטים במאמר הנפקת אסימוני אינטרנט מסוג JSON בנושא 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 דקות.

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

ספריות לקוח לשירותי משימות מתוזמנות

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

איך מאתחלים את Driver SDK