Autorisierungstokens abrufen

Was ist ein Token?

Für API-Methodenaufrufe aus Umgebungen mit geringem Vertrauen erfordert die Fleet Engine die Verwendung von JSON Web Tokens (JWTs), die von einem geeigneten 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 für nachfolgende Serverinteraktionen an den Client übergeben, bis es abläuft oder nicht mehr gültig ist.

Ihr Backend sollte sich mithilfe der standardmäßigen Standardanmeldedaten für Anwendungen bei der Fleet Engine authentifizieren und autorisieren. Verwenden Sie JWTs, die von einem geeigneten Dienstkonto signiert wurden. Für eine Eine Liste der Dienstkontorollen finden Sie unter Fleet Engine-Dienstkontorollen. in Fleet Engine-Grundlagen.

Ihr Backend sollte sich dagegen mithilfe der standardmäßigen Mechanismen für Standardanmeldedaten für Anwendungen bei der Fleet Engine authentifizieren und autorisieren.

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 den Aktualisierungsinformationen verpacken, die an die Fleet Engine gesendet werden. 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 JSON-Webtokens ausstellen für Fleet Engine.

Beispiel für einen Autorisierungstoken-Abruf

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 sieht möglicherweise anders aus, z. B. wird ein Hintergrundthread verwendet. 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