Uzyskaj tokeny autoryzacji

Co to jest token?

W przypadku wywołań metod interfejsu API z środowisk o niskim poziomie zaufania usługa Fleet Engine wymaga korzystania z tokenów sieciowych JSON (JWT) podpisanych odpowiednim kontem usługi. Ś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. JWT jest podpisywany, szyfrowany i przekazywany do klienta na potrzeby kolejnych interakcji z serwerem, dopóki nie wygaśnie lub nie straci 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.

W przeciwieństwie do tego Twój backend powinien się uwierzytelniać i autoryzować za pomocą Fleet Engine. przy użyciu standardowych domyślnych danych logowania aplikacji. i zbierania danych.

Więcej informacji o tokenach sieciowych JSON znajdziesz w artykule Tokeny sieciowe JSONpodstawach działania 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ć odświeżanie tokena, używaj go ponownie do momentu jego wygaśnięcia.
  • Odśwież token po jego wygaśnięciu.

Klasa AuthTokenFactory generuje tokeny autoryzacji podczas aktualizacji lokalizacji. Pakiet SDK musi zawierać tokeny z informacjami o aktualizacji, które mają zostać wysłane do Fleet Engine. Zanim spróbujesz zainicjować pakiet SDK, upewnij się, że implementacja po stronie serwera może wydawać tokeny.

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 przykładowa implementacja 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. w celu ponownego użycia i ponownie pobiera token, jeśli stary token znajduje się w ciągu 10 minut 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.

Dostępne biblioteki klienta dla Fleet Engine znajdziesz w artykule Biblioteki klienta dla usług przewozów na żądanie.

Co dalej?

Inicjowanie pakietu Driver SDK