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