Was ist ein Token?
Für API-Methodenaufrufe aus Umgebungen mit geringem Vertrauen erfordert die Fleet Engine die Verwendung von JSON Web Tokens (JWTs), die von einem geeigneten Dienstkonto signiert wurden. Zu den Umgebungen mit wenig Vertrauen gehören Smartphones und Browser. Ein JWT stammt von Ihrem Server, einer vollständig 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 Back-End sollte sich mithilfe der Standardmechanismen für Standardanmeldedaten für Anwendungen bei Fleet Engine authentifizieren und autorisieren. Verwenden Sie JWTs, die von einem entsprechenden Dienstkonto signiert wurden. Eine Liste der Dienstkontorollen finden Sie unter Fleet Engine-Dienstkontorollen in Fleet Engine – Grundlagen.
Im Gegensatz dazu sollte sich Ihr Back-End mithilfe der Standardmechanismen für Standardanmeldedaten für Anwendungen bei 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 Fahrer oder Nutzer mit den entsprechenden Autorisierungsdaten in Ihrer App anmeldet, müssen alle von diesem Gerät ausgegebenen Updates die entsprechenden Autorisierungstokens verwenden, die der Fleet Engine die Berechtigungen für die App mitteilen.
Als Entwickler sollte Ihre Clientimplementierung folgende Möglichkeiten bieten:
- Rufe ein JSON Web Token von deinem Server ab.
- Wiederverwenden Sie das Token, bis es abläuft, um die 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, die an die Fleet Engine gesendet werden. Achten Sie darauf, dass Ihre serverseitige Implementierung Tokens ausgeben 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 die grundlegende Implementierung einer 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 abläuft.
Ihre Implementierung kann andere Dinge tun, z. B. die Verwendung eines Hintergrundthreads zum Aktualisieren von Tokens.
Die verfügbaren Clientbibliotheken für Fleet Engine finden Sie unter Clientbibliotheken für Dienste mit geplanten Aufgaben.