Co to jest token?
Fleet Engine wymaga użycia tokenów sieciowych JSON (JWT) podpisanych przez odpowiednie konto usługi do wywołań metody interfejsu API pochodzących od low-Trust . Środowiska o niskim stopniu zaufania to m.in. smartfony i przeglądarki. Token JWT zaczyna się na serwerze, który jest w pełni zaufanym środowiskiem. Token JWT jest podpisany, zaszyfrowany i przekazywany do klienta w celu kolejnego serwera. do momentu ich wygaśnięcia lub utraty ważności.
Twój backend powinien uwierzytelniać się i autoryzować we Fleet Engine za pomocą standardowych domyślnych danych logowania aplikacji. Marka używaj tokenów JWT, które zostały podpisane przez odpowiednie konto usługi. Dla lista ról konta usługi, zobacz role konta usługi Fleet Engine w artykule Podstawy Fleet Engine.
Więcej informacji o tokenach sieciowych JSON znajdziesz w artykule na temat tokenów sieciowych JSON w Informacje o usłudze Fleet Engine.
Jak klienci otrzymują tokeny?
Gdy kierowca lub konsument zaloguje się do Twojej aplikacji za pomocą odpowiedniego danych uwierzytelniających, wszystkie aktualizacje wydane z tego urządzenia muszą używać odpowiednie tokeny autoryzacji, które komunikują się z Fleet Engine uprawnienia aplikacji.
Jako deweloper, implementacja klienta powinna dawać możliwość następujące:
- Pobierz token sieciowy JSON z serwera.
- Aby zminimalizować częstotliwość odświeżania tokenów, używaj tokena do momentu jego wygaśnięcia.
- Odśwież token po jego wygaśnięciu.
Klasa AuthTokenFactory
generuje tokeny autoryzacji przy aktualizacji lokalizacji
obecnie się znajdujesz. Pakiet SDK musi spakować tokeny wraz z aktualizacją
informacje, które należy wysłać do Fleet Engine. Upewnij się, że po stronie serwera
może wysyłać tokeny przed zainicjowaniem pakietu SDK.
Szczegółowe informacje o tokenach oczekiwanych przez usługę Fleet Engine znajdziesz w artykule o wysyłaniu kodu JSON w formacie JSON Tokeny sieciowe dla Fleet Engine.
Przykład modułu pobierania tokenów autoryzacji
Oto szkieletowa implementacja elementu 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);
}
}
}
Ta konkretna implementacja wykorzystuje wbudowanego klienta HTTP w Javie do pobrania token w formacie JSON z serwera autoryzacji. Klient zapisuje token. do ponownego użycia i ponownie pobiera token, jeśli stary token znajduje się w ciągu 10 minut od po upływie okresu ważności.
Implementacja może działać inaczej, np. używać wątku działającego w tle aby odświeżyć tokeny.
Listę bibliotek klienta dostępnych dla Fleet Engine znajdziesz w artykule Biblioteki klientów usług wycieczek na żądanie.