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 stammt von Ihrem Server, wird signiert, verschlüsselt und für nachfolgende Serverinteraktionen an den Client ü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 den Grundlagen zur Fleet Engine.

Wie erhalten Clients Tokens?

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

Als Entwickler sollte Ihre Clientimplementierung Folgendes ermöglichen:

  • Rufen Sie ein JSON Web Token von Ihrem Server ab.
  • Verwenden Sie das Token so lange, 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 Update-Informationen verpacken, die an Fleet Engine gesendet werden sollen. 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 Web Tokens für die Fleet Engine ausstellen.

Beispiel für einen Autorisierungstoken-Fetcher

Hier ist ein Beispiel für die Implementierung 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 noch einmal 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 Fleet Engine finden Sie unter Clientbibliotheken für On-Demand-Fahrten.

Nächste Schritte

Driver SDK initialisieren