מה זה טוקן?
ב-Fleet Engine נדרש שימוש בטוקנים של JSON Web (JWT) לקריאות של שיטות API מסביבות עם רמת אמון נמוכה: סמארטפונים ודפדפנים.
אסימון JWT נוצר בשרת שלכם, נחתם, מוצפן ומועבר ללקוח לאינטראקציות הבאות עם השרת עד שהוא יפוג או עד שהוא לא יהיה תקף יותר.
פרטים חשובים
- משתמשים ב-Application Default Credentials כדי לבצע אימות ולקבל הרשאה ב-Fleet Engine.
- משתמשים בחשבון שירות מתאים כדי לחתום על אסימוני JWT. מידע נוסף על תפקידים בחשבון השירות של Fleet Engine זמין במאמר יסודות Fleet Engine.
מידע נוסף על אסימוני אינטרנט מסוג JSON זמין במאמר אסימוני אינטרנט מסוג JSON במאמרים בנושא Fleet Engine.
איך לקוחות מקבלים אסימונים?
אחרי שנהג או לקוח מתחברים לאפליקציה באמצעות פרטי ההרשאה המתאימים, כל עדכון שיוצא מהמכשיר הזה חייב להשתמש באסימוני הרשאה מתאימים, שמעבירים ל-Fleet Engine את ההרשאות של האפליקציה.
בתור מפתחים, ההטמעה של הלקוח צריכה לספק את היכולת לבצע את הפעולות הבאות:
- מאחזרים JSON Web Token מהשרת.
- כדי לצמצם את מספר הפעמים שבהן צריך לרענן את הטוקן, אפשר להשתמש בו שוב ושוב עד שתוקפו יפוג.
- צריך לרענן את הטוקן כשהתוקף שלו פג.
הסיווג AuthTokenFactory יוצר טוקנים של הרשאה בזמן עדכון המיקום. ערכת ה-SDK צריכה לארוז את האסימונים עם פרטי העדכון כדי לשלוח אותם ל-Fleet Engine. לפני שמפעילים את ה-SDK, צריך לוודא שההטמעה בצד השרת יכולה להנפיק אסימונים.
פרטים על האסימונים ששירות Fleet Engine מצפה להם מופיעים במאמר בנושא הנפקת אסימוני אינטרנט מסוג JSON ל-Fleet Engine.
דוגמה ל-fetcher של טוקן הרשאה
הנה הטמעה בסיסית של 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, אפשר לעיין במאמר ספריות לקוח לשירותים של נסיעות על פי דרישה.