Obtenir des jetons d'autorisation

Qu'est-ce qu'un jeton ?

Fleet Engine nécessite l'utilisation de jetons Web JSON (JWT) signés par un compte de service approprié pour les appels de méthode API à partir de systèmes environnements Google Cloud. Les environnements à faible confiance incluent les smartphones et les navigateurs. Un jeton JWT proviennent de votre serveur, qui est un environnement entièrement approuvé. Le jeton JWT est signé, chiffré et transmis au client pour le serveur suivant jusqu'à ce qu'il expire ou qu'il ne soit plus valide.

Votre backend doit s'authentifier et autoriser l'accès à Fleet Engine à l'aide de Identifiants par défaut de l'application. Marque veillez à utiliser des jetons JWT signés par un compte de service approprié. Pour une liste des rôles de compte de service, consultez la page Rôles de compte de service Fleet Engine du cours sur les principes de base des moteurs de flotte.

Pour en savoir plus sur les jetons Web JSON, consultez la section Jetons Web JSON de Fleet Engine Essentials (Principes de base des moteurs de flotte)

Comment les clients obtiennent-ils des jetons ?

Une fois qu'un pilote ou un client se connecte à votre application à l'aide de la clé les identifiants d'autorisation, les mises à jour émises à partir de cet appareil doivent utiliser les jetons d'autorisation appropriés, qui communiquent à Fleet Engine les autorisations de l'application.

En tant que développeur, votre implémentation client doit permettre d'effectuer les éléments suivants:

  • Récupérez un jeton Web JSON sur votre serveur.
  • Réutilisez le jeton jusqu'à son expiration pour réduire son actualisation.
  • Actualisez le jeton lorsqu'il expire.

La classe AuthTokenFactory génère des jetons d'autorisation lors de la mise à jour de la position. en temps réel. Le SDK doit empaqueter les jetons d'informations à envoyer à Fleet Engine. Assurez-vous que votre serveur côté serveur peut émettre des jetons avant d'initialiser le SDK.

Pour en savoir plus sur les jetons attendus par le service Fleet Engine, consultez la section Émettre un fichier JSON Jetons Web pour Fleet Engine

Exemple d'outil de récupération de jetons d'autorisation

Voici un squelette d'implémentation d'un 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);
    }
  }
}

Cette implémentation particulière utilise le client HTTP Java intégré pour récupérer au format JSON émis par le serveur d'autorisation. Le client enregistre le jeton pour le réutiliser et le récupère à nouveau si l'ancien jeton se trouve dans les 10 minutes délai d'expiration.

Votre implémentation peut se comporter différemment, par exemple en utilisant un thread d'arrière-plan pour actualiser les jetons.

Pour connaître les bibliothèques clientes disponibles pour Fleet Engine, consultez Bibliothèques clientes pour les services de tâches planifiées

Étape suivante

Initialiser le SDK Driver