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

מה זה אסימון?

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

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

מידע נוסף על אסימוני אינטרנט 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 דקות מועד תפוגה.

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

מידע על ספריות הלקוח הזמינות ל-Fleet Engine זמין בכתובת ספריות לקוח לשירותי משימות מתוזמנות

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

הפעלת ה-SDK של מנהל התקן