Autorisierungstokens abrufen

Was ist ein Token?

Die Fleet Engine erfordert die Verwendung von JSON Web Tokens (JWTs) für API-Methodenaufrufe aus weniger vertrauenswürdigen Umgebungen: Smartphones und Browsern.

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

Wichtige Details

Weitere Informationen zu JSON Web Tokens finden Sie unter JSON Web Tokens in Fleet Engine Essentials.

Wie erhalten Clients Tokens?

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

Als Entwickler sollte Ihre Clientimplementierung Folgendes ermöglichen:

  • 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, wenn der Standort aktualisiert wird. Das SDK muss die Tokens mit den Aktualisierungsinformationen verpacken, die an die Fleet Engine gesendet werden sollen. Achten Sie darauf, dass 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 Web Tokens für die Fleet Engine ausstellen.

Beispiel für einen Autorisierungstoken-Fetcher

Hier ist eine Gerüstimplementierung 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);
    }
  }
}

In 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 erneut ab, wenn das alte Token innerhalb von 10 Minuten vor seiner Ablaufzeit liegt.

In Ihrer Implementierung können Sie die Aktualisierungstokens auch anders aktualisieren, z. B. über einen Hintergrundthread.

Informationen zu den verfügbaren Clientbibliotheken für die Fleet Engine finden Sie unter Clientbibliotheken für Dienste für geplante Aufgaben.

Nächste Schritte

Driver SDK initialisieren