Recupera token di autorizzazione

Che cos'è un token?

Fleet Engine richiede l'utilizzo di token web JSON (JWT) per le chiamate ai metodi API da ambienti a bassa attendibilità: smartphone e browser.

Un JWT ha origine sul tuo server, viene firmato, criptato e trasmesso al client per le successive interazioni con il server fino alla scadenza o alla perdita di validità.

Dettagli chiave

Per saperne di più sui token web JSON, consulta la sezione Token web JSON in Fleet Engine Essentials.

Come ottengono i token i clienti?

Una volta che un autista o un consumatore accede alla tua app utilizzando le credenziali di autorizzazione appropriate, tutti gli aggiornamenti emessi da quel dispositivo devono utilizzare i token di autorizzazione appropriati, che comunicano a Fleet Engine le autorizzazioni per l'app.

In qualità di sviluppatore, l'implementazione del client deve fornire la possibilità di eseguire le seguenti operazioni:

  • Recupera un token web JSON dal tuo server.
  • Riutilizza il token fino alla scadenza per ridurre al minimo gli aggiornamenti del token.
  • Aggiorna il token quando scade.

La classe AuthTokenFactory genera token di autorizzazione al momento dell'aggiornamento della posizione. L'SDK deve includere i token con le informazioni di aggiornamento da inviare a Fleet Engine. Prima di inizializzare l'SDK, assicurati che l'implementazione lato server possa emettere token.

Per i dettagli sui token previsti dal servizio Fleet Engine, vedi Emettere token web JSON per Fleet Engine.

Esempio di un recuperatore di token di autorizzazione

Di seguito è riportata un'implementazione di base di 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);
    }
  }
}

Questa particolare implementazione utilizza il client HTTP Java integrato per recuperare un token in formato JSON dal server di autorizzazione. Il client salva il token per il riutilizzo e lo recupera di nuovo se il vecchio token è a 10 minuti dalla data di scadenza.

La tua implementazione potrebbe funzionare in modo diverso, ad esempio utilizzando un thread in background per aggiornare i token.

Per le librerie client disponibili per Fleet Engine, consulta Librerie client per i servizi di attività pianificate.

Passaggi successivi

Inizializza il Driver SDK