Recupera token di autorizzazione

Che cos'è un token?

Per le chiamate ai metodi dell'API da ambienti con un livello di attendibilità basso, Fleet Engine richiede l'utilizzo di token web JSON (JWT) firmati da un account di servizio appropriato. Gli ambienti con un livello di attendibilità basso includono smartphone e browser. Un JWT ha origine sul tuo server, che è un ambiente completamente attendibile. Il JWT viene firmato, criptato e passato al client per le interazioni successive con il server finché non scade o non è più valido.

Il tuo backend deve autenticarsi e autorizzare Fleet Engine utilizzando i meccanismi standard delle credenziali predefinite dell'applicazione. Assicurati di utilizzare JWT firmati da un account di servizio appropriato. Per un elenco dei ruoli degli account di servizio, consulta i ruoli degli account di servizio Fleet Engine in Nozioni di base su Fleet Engine.

Al contrario, il backend deve autenticarsi e autorizzarsi in Fleet Engine utilizzando i meccanismi standard delle credenziali predefinite dell'applicazione.

Per ulteriori informazioni sui token web JSON, consulta Token web JSON in Elementi essenziali di Fleet Engine.

In che modo i client ricevono i token?

Quando un conducente o un consumatore accede all'app utilizzando le credenziali di autorizzazione appropriate, tutti gli aggiornamenti emessi da tale dispositivo devono utilizzare token di autorizzazione appropriati, che comunicano a Fleet Engine le autorizzazioni per l'app.

In qualità di sviluppatore, l'implementazione del client deve consentire di svolgere quanto segue:

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

La classe AuthTokenFactory genera token di autorizzazione al momento dell'aggiornamento della posizione. L'SDK deve pacchettizzare 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 informazioni dettagliate sui token previsti dal servizio Fleet Engine, consulta Emettere token web JSON per Fleet Engine.

Esempio di un recuperatore di token di autorizzazione

Ecco uno schema di implementazione 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 token precedente è entro 10 minuti dal suo termine 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 per le corse on demand.

Passaggi successivi

Inizializza l'SDK driver