Was ist ein Token?
Fleet Engine erfordert die Verwendung von JSON Web Tokens (JWTs), die von einem Entsprechendes Dienstkonto für API-Methodenaufrufe aus Low-Trust- Umgebungen. Zu den Umgebungen mit wenig Vertrauen gehören Smartphones und Browser. Ein JWT stammt von Ihrem Server, einer voll vertrauenswürdigen Umgebung. Das JWT wird signiert, verschlüsselt und an den Client für den nachfolgenden Server übergeben. Interaktionen, bis sie abläuft oder nicht mehr gültig ist.
Ihr Backend sollte sich mit der folgenden Methode bei Fleet Engine authentifizieren und autorisieren Standardmechanismen für Standardanmeldedaten für Anwendungen. Marke Verwenden Sie JWTs, die von einem entsprechenden Dienstkonto signiert wurden. Für eine Eine Liste der Dienstkontorollen finden Sie unter Fleet Engine-Dienstkontorollen. in Fleet Engine-Grundlagen.
Weitere Informationen zu JSON Web Tokens finden Sie unter JSON Web Tokens in Fleet Engine Essentials.
Wie erhalten Clients Tokens?
Sobald sich ein Treiber oder Nutzer mit der entsprechenden müssen alle Updates, die von diesem Gerät ausgehen, entsprechende Autorisierungstokens, die mit Fleet Engine Berechtigungen für die App.
Als Entwickler sollte Ihre Client-Implementierung die Möglichkeit bieten, Folgendes:
- Rufen Sie ein JSON Web Token von Ihrem 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 dem Update verpacken
an Fleet Engine zu senden. Achten Sie darauf, dass Ihre serverseitige
Implementierung von Tokens vor der Initialisierung des SDK Tokens ausgeben.
Weitere Informationen zu den vom Fleet Engine-Dienst erwarteten Tokens finden Sie unter Problem mit JSON Web Tokens für Fleet Engine.
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 eine Token im JSON-Format vom Autorisierungsserver. Der Client speichert das Token. zur Wiederverwendung und ruft das Token noch einmal ab, wenn das alte Token innerhalb von 10 Minuten Ablaufzeit.
Ihre Implementierung kann andere Dinge bewirken, z. B. durch die Verwendung eines Hintergrundthreads. um Tokens zu aktualisieren.
Informationen zu den verfügbaren Clientbibliotheken für Fleet Engine finden Sie unter Clientbibliotheken für On-Demand-Reisedienste