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

מה זה טוקן?

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

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

פרטים חשובים

מידע נוסף על אסימוני אינטרנט מסוג JSON זמין במאמר אסימוני אינטרנט מסוג JSON ביסודות של Fleet Engine.

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

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

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

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

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

כדי לדעת אילו טוקנים נדרשים לשירות Fleet Engine, קראו את המאמר הנפקת טוקנים של JSON Web ל-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);
    }
  }
}

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

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

במאמר ספריות לקוח לשירותים של משימות מתוזמנות מפורטות ספריות הלקוח שזמינות ל-Fleet Engine.

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

הפעלה של Driver SDK