Was ist ein Token?
Für API-Methodenaufrufe aus Umgebungen mit geringem Vertrauen benötigt Fleet Engine die Verwendung von JSON-Webtokens (JWTs), die von einem entsprechenden Dienstkonto signiert sind. Zu den Umgebungen mit wenig Vertrauen gehören Smartphones und Browser. Ein JWT stammt von deinem Server, einer vollkommen vertrauenswürdigen Umgebung. Das JWT wird signiert, verschlüsselt und für nachfolgende Serverinteraktionen an den Client übergeben, bis es abläuft oder nicht mehr gültig ist.
Ihr Backend sollte sich mithilfe der standardmäßigen Standardanmeldedaten für Anwendungen bei der Fleet Engine authentifizieren und autorisieren. Verwenden Sie JWTs, die von einem geeigneten Dienstkonto signiert wurden. Eine Liste der Dienstkontorollen finden Sie unter Fleet Engine-Dienstkontorollen in Fleet Engine – Grundlagen.
Ihr Backend sollte sich dagegen mithilfe der standardmäßigen Standardanmeldedaten für Anwendungen bei der Fleet Engine authentifizieren und autorisieren.
Weitere Informationen zu JSON Web Tokens finden Sie unter JSON Web Tokens im Artikel Fleet Engine Essentials.
Wie erhalten Clients Tokens?
Sobald sich ein Treiber oder Nutzer mit den entsprechenden Anmeldedaten bei Ihrer Anwendung anmeldet, müssen alle von diesem Gerät ausgegebenen Aktualisierungen die entsprechenden Autorisierungstokens verwenden, die Fleet Engine die Berechtigungen für die Anwendung mitteilen.
Als Entwickler sollte Ihre Clientimplementierung Folgendes ermöglichen:
- Rufe ein JSON Web Token von deinem Server ab.
- Verwenden Sie das Token wieder, bis es abläuft, um Tokenaktualisierungen zu minimieren.
- Aktualisieren Sie das Token, wenn es abläuft.
Die Klasse AuthTokenFactory
generiert Autorisierungstokens bei der Standortaktualisierung. Das SDK muss die Tokens mit den Aktualisierungsinformationen verpacken, um sie an Fleet Engine zu senden. Prüfen Sie, ob Ihre serverseitige Implementierung Tokens ausstellen kann, bevor Sie das SDK initialisieren.
Weitere Informationen zu den vom Fleet Engine-Dienst erwarteten Tokens finden Sie unter JSON-Webtokens für Fleet Engine ausgeben.
Beispiel für einen Abruf von Autorisierungstokens
Hier ist eine Skelettimplementierung eines 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);
}
}
}
Diese spezielle Implementierung verwendet den integrierten Java-HTTP-Client, um ein Token im JSON-Format vom Autorisierungsserver abzurufen. Der Client speichert das Token zur Wiederverwendung und ruft es noch einmal ab, wenn das alte Token innerhalb von 10 Minuten nach Ablauf der Gültigkeit abläuft.
In Ihrer Implementierung kann es anders ablaufen, z. B. wenn Sie zum Aktualisieren von Tokens einen Hintergrund-Thread verwenden.
Die verfügbaren Clientbibliotheken für Fleet Engine finden Sie unter Clientbibliotheken für Dienste auf Abruf.