Qu'est-ce qu'un jeton ?
Fleet Engine nécessite l'utilisation de jetons Web JSON (JWT) pour les appels de méthode d'API à partir d'environnements à faible niveau de confiance : smartphones et navigateurs.
Un jeton JWT est généré sur votre serveur, signé, chiffré et transmis au client pour les interactions ultérieures avec le serveur jusqu'à son expiration ou sa perte de validité.
Informations essentielles
- Utilisez les identifiants par défaut de l'application pour vous authentifier et vous autoriser auprès de Fleet Engine.
- Utilisez un compte de service approprié pour signer les jetons JWT. Consultez la section Rôles des comptes de service Fleet Engine dans Principes de base de Fleet Engine.
Pour en savoir plus sur les jetons Web JSON, consultez la section Jetons Web JSON dans Principes de base de Fleet Engine.
Comment les clients obtiennent-ils des jetons ?
Une fois qu'un chauffeur ou un consommateur se connecte à votre application à l'aide des identifiants d'autorisation appropriés, toutes les mises à jour émises à partir de cet appareil doivent utiliser des jetons d'autorisation appropriés, qui communiquent à Fleet Engine les autorisations de l'application.
En tant que développeur, votre implémentation cliente doit permettre d'effectuer les opérations suivantes :
- Récupérer un jeton Web JSON à partir de votre serveur.
- Réutiliser le jeton jusqu'à son expiration pour minimiser les actualisations de jeton.
- Actualiser le jeton lorsqu'il expire.
La classe AuthTokenFactory génère des jetons d'autorisation au moment de la mise à jour de la position. Le SDK doit regrouper les jetons avec les informations de mise à jour à envoyer à Fleet Engine. Assurez-vous que votre implémentation 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 des jetons Web JSON pour Fleet Engine.
Exemple de récupérateur de jetons d'autorisation
Voici une implémentation squelette 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 un jeton au format JSON à partir du serveur d'autorisation. Le client enregistre le jeton pour le réutiliser et le récupère à nouveau si l'ancien jeton expire dans les 10 minutes.
Votre implémentation peut fonctionner 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 la section Bibliothèques clientes pour les services de tâches planifiées.