¿Qué es un token?
Fleet Engine requiere el uso de tokens web JSON (JWT) firmados por un cuenta de servicio adecuada para las llamadas de método a la API desde modelos de entornos de desarrollo de software. Los entornos de baja confianza incluyen smartphones y navegadores. Un JWT Se origina en tu servidor, que es un entorno completamente confiable. El token JWT se firma, se encripta y se pasa al cliente para la posterior interacciones hasta que caduque o deje de ser válida.
Tu backend debe autenticarse y autorizarse contra Fleet Engine usando mecanismos estándar de credenciales predeterminadas de la aplicación. Marca asegúrate de usar JWT firmados con la cuenta de servicio correspondiente. Para un lista de los roles de la cuenta de servicio; consulta los roles de la cuenta de servicio de Flet Engine en Aspectos básicos de Flet Engine.
Para obtener más información sobre los tokens web JSON, consulta Tokens web JSON en Aspectos esenciales de Flet Engine.
¿Cómo obtienen tokens los clientes?
Una vez que un conductor o consumidor accede a tu app con la credenciales de autorización, todas las actualizaciones que se emitan desde ese dispositivo deben los tokens de autorización adecuados, que comunican a Fleet Engine la permisos para la app.
Como desarrollador, la implementación de tu cliente debe proporcionar la capacidad de hacer lo siguiente: lo siguiente:
- Recupera un token web JSON de tu servidor.
- Vuelve a usar el token hasta que venza para minimizar las actualizaciones de token.
- Actualiza el token cuando venza.
La clase AuthTokenFactory
genera tokens de autorización durante la actualización de la ubicación.
tiempo. El SDK debe empaquetar los tokens con la actualización
para enviar a Fleet Engine. Asegúrate de que la configuración del servidor
puede emitir tokens antes de inicializar el SDK.
Para obtener más información sobre los tokens que espera el servicio de Fleet Engine, consulta el problema de JSON Tokens web para Fleet Engine.
Ejemplo de un recuperador de tokens de autorización
A continuación, se muestra una implementación básica de 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);
}
}
}
Esta implementación en particular usa el cliente HTTP de Java integrado para recuperar un token en formato JSON desde el servidor de autorización. El cliente guarda el token para volver a usar y recupera el token si el anterior está dentro de los 10 minutos y una hora de vencimiento.
Es posible que tu implementación realice acciones de manera diferente; por ejemplo, usa un subproceso en segundo plano. para actualizar tokens.
Si deseas conocer las bibliotecas cliente disponibles para Fleet Engine, consulta Bibliotecas cliente para servicios de tareas programadas