Autorisierungstokens abrufen

Was ist ein Token?

Für API-Methodenaufrufe aus Umgebungen mit geringem Vertrauensgrad (Smartphones und Browser) ist in Fleet Engine die Verwendung von JSON-Webtokens (JWTs) erforderlich.

Ein JWT wird auf Ihrem Server erstellt, signiert, verschlüsselt und an den Client weitergegeben. Es wird für nachfolgende Serverinteraktionen verwendet, bis es abläuft oder nicht mehr gültig ist.

Wichtige Details

Weitere Informationen zu JSON-Webtokens finden Sie unter JSON-Webtokens in Grundlagen von Fleet Engine.

Wie erhalten Clients Tokens?

Sobald sich ein Fahrer oder Nutzer mit den entsprechenden Autorisierungsanmeldedaten in Ihrer App anmeldet, müssen alle von diesem Gerät ausgegebenen Aktualisierungen entsprechende Autorisierungstokens verwenden, die Fleet Engine die Berechtigungen für die App mitteilen.

Als Entwickler sollte Ihre Clientimplementierung Folgendes ermöglichen:

  • Ein JSON-Webtoken von Ihrem Server abrufen.
  • Das Token bis zum Ablauf wiederverwenden, um Tokenaktualisierungen zu minimieren.
  • Das Token aktualisieren, wenn es abläuft.

Die Klasse AuthTokenFactory generiert Autorisierungstokens zum Zeitpunkt der Standortaktualisierung. Das SDK muss die Tokens mit den Aktualisierungsinformationen verpacken, um sie an Fleet Engine zu senden. Achten Sie darauf, dass Ihre serverseitige Implementierung Tokens ausgeben kann, bevor Sie das SDK initialisieren.

Details zu den vom Fleet Engine-Dienst erwarteten Tokens finden Sie unter JSON Webtokens für Fleet Engine ausgeben.

Beispiel für einen Abrufer von Autorisierungstokens

Hier ist eine Skelettimplementierung von 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);
    }
  }
}

Bei dieser Implementierung wird der integrierte Java-HTTP-Client verwendet, 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 sich unterscheiden, z. B. durch die Verwendung eines Hintergrundthreads zum Aktualisieren von Tokens.

Die verfügbaren Clientbibliotheken für Fleet Engine finden Sie unter Clientbibliotheken für On-Demand-Fahrdienste.

Nächste Schritte

Driver SDK initialisieren