Che cos'è un token?
Per le chiamate di metodi API da ambienti a bassa attendibilità, Fleet Engine richiede l'utilizzo di token web JSON (JWT) firmati da un account di servizio appropriato. Gli ambienti a basso livello di attendibilità includono smartphone e browser. Un JWT viene generato sul tuo server, che è un ambiente completamente attendibile. JWT viene firmato, criptato e passato al client per il successivo server interazioni fino a quando non scade o non è più valido. Per un elenco dei ruoli dell'account di servizio. Vedi i ruoli dell'account di servizio di Fleet Engine in Nozioni di base su Fleet Engine.
Al contrario, il backend deve autenticarsi e autorizzare Fleet Engine Utilizzando le Credenziali predefinite dell'applicazione standard i meccanismi dell'impatto del diamante.
Per ulteriori informazioni sui token web JSON, consulta la pagina Token web JSON in Fleet Engine Essentials.
In che modo i client ricevono i token?
Quando un conducente o un consumatore accede alla tua app utilizzando l'app credenziali di autorizzazione, eventuali aggiornamenti emessi da tale dispositivo devono utilizzare dei token di autorizzazione appropriati, che comunicano a Fleet Engine autorizzazioni per l'app.
In qualità di sviluppatore, l'implementazione del cliente deve fornire la possibilità di farlo le seguenti:
- Recupera un token web JSON dal tuo server.
- Riutilizza il token fino alla scadenza per ridurre al minimo gli aggiornamenti dei token.
- Aggiorna il token alla scadenza.
La classe AuthTokenFactory
genera token di autorizzazione all'aggiornamento della sede
nel tempo. L'SDK deve pacchettizzare i token con l'aggiornamento
le informazioni da inviare a Fleet Engine. Assicurati che i server
può emettere token prima di inizializzare l'SDK.
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 in formato JSON dal server di autorizzazione. Il client salva il token per il riutilizzo e lo recupera nuovamente se precedente è entro 10 minuti dalla sua data di scadenza.
La tua implementazione potrebbe fare le cose in modo diverso, ad esempio utilizzare un thread in background per aggiornare i token.
Per le librerie client disponibili per Fleet Engine, vedi Librerie client per i servizi di attività pianificate.