Autorisierungstokens abrufen

Was ist ein Token?

Für API-Methodenaufrufe aus Low-Trust-Umgebungen benötigt Fleet Engine Verwendung von JSON-Webtokens (JWTs), die von einem entsprechenden Dienstkonto signiert wurden. Beispiele für Umgebungen mit geringem Vertrauen sind Smartphones und Browser. Ein JWT stammt von deinem Server, einer vollkommen 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. Verwenden Sie JWTs, die von einem geeigneten Dienstkonto signiert wurden. Eine Liste der Dienstkontorollen finden Sie unter Fleet Engine-Dienstkontorollen in Fleet Engine – Grundlagen.

Im Gegensatz dazu sollte sich Ihr Backend bei Fleet Engine authentifizieren und autorisieren mit standardmäßigen Standardanmeldedaten für Anwendungen Mechanismen.

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 Clientimplementierung Folgendes ermöglichen:

  • Rufen Sie ein JSON Web Token von Ihrem Server ab.
  • Wiederverwenden Sie das Token, bis es abläuft, um die Tokenaktualisierungen zu minimieren.
  • Aktualisieren Sie das Token, wenn es abläuft.

Die AuthTokenFactory-Klasse generiert Autorisierungstokens zum Zeitpunkt der Standortaktualisierung. Das SDK muss die Tokens mit dem Update verpacken an Fleet Engine zu senden. Prüfen Sie, ob Ihre serverseitige Implementierung Tokens ausstellen kann, bevor Sie das SDK initialisieren.

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

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 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

Nächste Schritte

Treiber-SDK initialisieren