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

מה זה אסימון?

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

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

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

מידע נוסף על אסימוני אינטרנט JSON זמין במאמר 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