Wystaw tokeny sieciowe JSON

W tym dokumencie opisujemy, jak wydawać tokeny sieciowe JSON w ramach umożliwiania aplikacjom internetowym i mobilnym dostępu do danych Fleet Engine. Jeśli jeszcze tego nie zrobiono, przeczytaj sekcję Tokeny sieciowe JSONBezpieczeństwie w Fleet Engine. Za pomocą usługi Fleet Engine możesz wydawać tokeny JWT w jeden z tych sposobów:

  • Użyj biblioteki autoryzacji – Google zaleca to podejście, gdy baza kodu jest napisana w Javie. Ta biblioteka obsługuje wydawanie tokenów JWT we wszystkich scenariuszach użycia, które mogą być potrzebne w usłudze, i znacznie upraszcza implementację.
  • Tworzenie własnych tokenów JWT – jeśli nie możesz użyć naszej biblioteki JWT, musisz wbudować te tokeny w swoją bazę kodu. Ta sekcja zawiera różne przykłady tokenów JWT w poszczególnych scenariuszach.

Jak działają tokeny JWT

W przypadku niezaufanych środowisk, takich jak telefony komórkowe i przeglądarki internetowe, serwer backendu wydaje tokeny JWT, które działają w ten sposób:

  • Kod klienta działający w środowisku o niskim poziomie zaufania wywołuje kod serwera działający w środowisku o pełnym poziomie zaufania, aby poprosić o odpowiedni token JWT do przekazania do Fleet Engine.

  • Tokeny JWT są powiązane z kontami usługi, więc żądania wysyłane do Fleet Engine są niejawnie powiązane z kontem usługi, które podpisało token JWT.

  • Deklaracje JWT dodatkowo ograniczają zasoby, na których klient może wykonywać operacje, np. konkretne pojazdy, przejazdy lub zadania.

Korzystanie z biblioteki autoryzacji w Javie

Aby używać biblioteki autoryzacji Fleet Engine w Javie, otwórz repozytorium GitHub. Biblioteka upraszcza tworzenie tokenów JWT Fleet Engine i bezpieczne ich podpisywanie. Zapewnia:

  • Deklaracje zależności projektu
  • Pełna lista wszystkich ról konta usługi w przypadku przejazdów na żądanie lub zaplanowanych zadań
  • Mechanizmy podpisywania tokenów inne niż używanie plików danych logowania, np. podszywanie się pod konto usługi
  • Dołącza podpisane tokeny do żądań wychodzących wysyłanych ze stuba gRPC lub biblioteki klienta Google API Codegen (GAPIC).
  • Instrukcje dotyczące integracji sygnatariuszy z bibliotekami klienta Fleet Engine

Jeśli wydajesz tokeny JWT z poziomu kodu

Jeśli nie możesz użyć biblioteki autoryzacji dla Javy, musisz zaimplementować tokeny JWT w swojej bazie kodu. W tej sekcji znajdziesz kilka wskazówek dotyczących tworzenia własnych tokenów. Listę pól i deklaracji JWT znajdziesz w sekcji Tokeny internetowe JSON w artykule Bezpieczeństwo w Fleet Engine. Role konta usługi używane przez Fleet Engine znajdziesz w sekcji Role konta usługi. Listę przykładów tokenów JWT w przypadku przejazdów na żądanie i zaplanowanych zadań znajdziesz w sekcji poniżej.

Ogólne wskazówki

  • Używaj odpowiednich kont usługi i ról. Konto usługi i powiązana z nim rola zapewniają, że użytkownik żądający tokena jest uprawniony do wyświetlania informacji, do których token daje mu dostęp. W szczególności:
    • Jeśli podpisujesz JWT, który ma być przekazywany na urządzenie mobilne, użyj konta usługi z rolą pakietu SDK dla kierowców lub konsumentów. W przeciwnym razie urządzenie mobilne może zmieniać dane, do których nie powinno mieć dostępu, i uzyskiwać do nich dostęp.
    • Jeśli podpisujesz token JWT, który ma być używany do wywołań z uprawnieniami, używaj konta usługi z odpowiednią rolą administratora Fleet Engine podczas korzystania z ADC lub tokenów JWT. W przeciwnym razie operacja się nie powiedzie.
  • Udostępniaj tylko utworzone tokeny. Nigdy nie udostępniaj danych logowania używanych do tworzenia tokenów.
  • W przypadku wywołań gRPC mechanizm dołączania tokena zależy od języka i platformy użytych do wywołania. Mechanizm określania tokena w wywołaniu HTTP polega na dołączeniu nagłówka Authorization z tokenem dostępu, którego wartością jest token.
  • Zwraca czas wygaśnięcia. Serwer musi zwracać czas wygaśnięcia tokena, zwykle w sekundach.
  • Jeśli musisz utworzyć i podpisać JSON bezpośrednio jako podmiot tokena, zamiast używać tokenów dostępu OAuth 2.0, zapoznaj się z instrukcjami dotyczącymi autoryzacji konta usługi bez OAuth w dokumentacji Identity Developer.

W przypadku przejazdów na żądanie

  • Podczas tworzenia ładunku JWT dodaj dodatkowe roszczenie w sekcji autoryzacji z kluczem vehicleid lub tripid ustawionym na wartość identyfikatora pojazdu lub identyfikatora przejazdu, dla którego wykonywane jest wywołanie.

W przypadku zaplanowanych zadań

  • Gdy serwer wywołuje inne interfejsy API, tokeny muszą też zawierać odpowiednie roszczenie. Aby to zrobić, wykonaj te czynności:
    • Ustaw wartość każdego klucza na *.
    • Przyznaj użytkownikowi dostęp do wszystkich taskidsdeliveryvehicleids. Aby to zrobić, dodaj dodatkowe roszczenie w sekcji autoryzacji z kluczami taskiddeliveryvehicleid.
    • Gdy używasz gwiazdki (*) w deklaracji taskids, musi ona być jedynym elementem w tablicy.

Przykłady tokenów JWT w przypadku przejazdów na żądanie

W tej sekcji znajdziesz przykłady tokenów JWT w przypadku typowych scenariuszy, jeśli korzystasz z przejazdów na żądanie.

Przykładowy token operacji w aplikacji dla kierowców

{
  "alg": "RS256",
  "typ": "JWT",
  "kid": "private_key_id_of_driver_service_account"
}
.
{
  "iss": "driver@yourgcpproject.iam.gserviceaccount.com",
  "sub": "driver@yourgcpproject.iam.gserviceaccount.com",
  "aud": "https://fleetengine.googleapis.com/",
  "iat": 1511900000,
  "exp": 1511903600,
  "authorization": {
     "vehicleid": "driver_12345"
   }
}

Przykładowy token operacji w aplikacji konsumenckiej

{
  "alg": "RS256",
  "typ": "JWT",
  "kid": "private_key_id_of_consumer_service_account"
}
.
{
  "iss": "consumer@yourgcpproject.iam.gserviceaccount.com",
  "sub": "consumer@yourgcpproject.iam.gserviceaccount.com",
  "aud": "https://fleetengine.googleapis.com/",
  "iat": 1511900000,
  "exp": 1511903600,
  "authorization": {
     "tripid": "trip_54321"
   }
}

Przykłady tokenów JWT w przypadku zaplanowanych zadań

W tej sekcji znajdziesz przykładowy token JWT w typowych scenariuszach, jeśli używasz zaplanowanych zadań.

Przykładowy token aplikacji dla kierowców

    {
      "alg": "RS256",
      "typ": "JWT",
      "kid": "private_key_id_of_delivery_driver_service_account"
    }
    .
    {
      "iss": "driver@yourgcpproject.iam.gserviceaccount.com",
      "sub": "driver@yourgcpproject.iam.gserviceaccount.com",
      "aud": "https://fleetengine.googleapis.com/",
      "iat": 1511900000,
      "exp": 1511903600,
      "authorization": {
         "deliveryvehicleid": "driver_12345"
       }
    }

Przykładowy token aplikacji konsumenckiej

    {
      "alg": "RS256",
      "typ": "JWT",
      "kid": "private_key_id_of_delivery_consumer_service_account"
    }
    .
    {
      "iss": "consumer@yourgcpproject.iam.gserviceaccount.com",
      "sub": "consumer@yourgcpproject.iam.gserviceaccount.com",
      "aud": "https://fleetengine.googleapis.com/",
      "iat": 1511900000,
      "exp": 1511903600,
      "authorization": {
         "trackingid": "shipment_12345"
       }
    }

Przykłady JWT dotyczące operacji na flotach

W tej sekcji znajdziesz przykład tokena JWT w typowym scenariuszu dotyczącym zarządzania flotą.

Przykładowy token do śledzenia wszystkich zadań i pojazdów we flocie

Poniższy przykład to token, który śledzi wszystkie zadania i pojazdy we flocie z poziomu aplikacji internetowej używanej przez operatora. Uprawnienia wymagane do tych operacji są większe niż w przypadku aplikacji klienckich. Więcej informacji o implementacji po stronie klienta, która będzie używać tego tokena, znajdziesz w artykule Konfigurowanie biblioteki śledzenia floty w JavaScript:

  • Podpisz token za pomocą roli Fleet Engine Delivery Fleet Reader Cloud IAM.

   {
      "alg": "RS256",
      "typ": "JWT",
      "kid": "private_key_id_of_consumer_service_account"
    }
    .
    {
      "iss": "superuser@yourgcpproject.iam.gserviceaccount.com",
      "sub": "superuser@yourgcpproject.iam.gserviceaccount.com",
      "aud": "https://fleetengine.googleapis.com/",
      "iat": 1511900000,
      "exp": 1511903600,
      "scope": "https://www.googleapis.com/auth/xapi",
      "authorization": {
         "taskid": "*",
         "deliveryvehicleid": "*",
       }
    }

Alternatywna metoda uwierzytelniania operacji serwera backendu

Google zaleca używanie ADC do uwierzytelniania operacji serwera backendu. Jeśli nie możesz używać ADC i musisz używać tokenów JWT, zapoznaj się z tymi przykładami.

Przykładowy token operacji serwera backendu na żądanie

  {
    "alg": "RS256",
    "typ": "JWT",
    "kid": "private_key_id_of_provider_service_account"
  }

  {
    "iss": "provider@yourgcpproject.iam.gserviceaccount.com",
    "sub": "provider@yourgcpproject.iam.gserviceaccount.com",
    "aud": "https://fleetengine.googleapis.com/",
    "iat": 1511900000,
    "exp": 1511903600,
    "authorization": {
       "vehicleid": "*",
       "tripid": "*"
     }
  }
  

Przykładowy token zaplanowanej operacji na serwerze backendu

    {
      "alg": "RS256",
      "typ": "JWT",
      "kid": "private_key_id_of_provider_service_account"
    }
    .
    {
      "iss": "provider@yourgcpproject.iam.gserviceaccount.com",
      "sub": "provider@yourgcpproject.iam.gserviceaccount.com",
      "aud": "https://fleetengine.googleapis.com/",
      "iat": 1511900000,
      "exp": 1511903600,
      "authorization": {
         "taskid": "*"
       }
    }
   

Przykładowy token dla zaplanowanej operacji tworzenia zadań wsadowych na serwerze backendu

    {
      "alg": "RS256",
      "typ": "JWT",
      "kid": "private_key_id_of_provider_service_account"
    }
    .
    {
      "iss": "provider@yourgcpproject.iam.gserviceaccount.com",
      "sub": "provider@yourgcpproject.iam.gserviceaccount.com",
      "aud": "https://fleetengine.googleapis.com/",
      "iat": 1511900000,
      "exp": 1511903600,
      "authorization": {
         "taskids": ["*"]
       }
    }
  

Przykładowy token dla zaplanowanej operacji na serwerze backendu dotyczącej każdego pojazdu dostawczego

    {
      "alg": "RS256",
      "typ": "JWT",
      "kid": "private_key_id_of_provider_service_account"
    }
    .
    {
      "iss": "provider@yourgcpproject.iam.gserviceaccount.com",
      "sub": "provider@yourgcpproject.iam.gserviceaccount.com",
      "aud": "https://fleetengine.googleapis.com/",
      "iat": 1511900000,
      "exp": 1511903600,
      "authorization": {
         "deliveryvehicleid": "*"
       }
    }
  

Co dalej?

  • Sprawdź konfigurację, aby utworzyć pojazd testowy i upewnić się, że tokeny działają zgodnie z oczekiwaniami.
  • Informacje o używaniu ADC zamiast tokenów JWT w przypadku operacji na serwerze backendu znajdziesz w omówieniu bezpieczeństwa.