JSON-Webtokens ausstellen

In diesem Dokument erfahren Sie, wie Sie JSON Web Tokens ausstellen, um Ihren Web- und mobilen Apps Zugriff auf Fleet Engine-Daten zu ermöglichen. Lesen Sie sich im Abschnitt Sicherheit in der Fleet Engine den Artikel JSON Web Tokens durch, falls Sie das noch nicht getan haben. Mit dem Fleet Engine-Dienst können Sie JWTs auf folgende Arten ausstellen:

  • Autorisierungsbibliothek verwenden: Google empfiehlt diesen Ansatz, wenn Ihre Codebasis in Java geschrieben ist. Diese Bibliothek kümmert sich um die Ausstellung von JWTs für alle Anwendungsfälle, die Sie für den Dienst benötigen, und vereinfacht die Implementierung erheblich.
  • Eigene JWTs erstellen: Wenn du unsere JWT-Bibliothek nicht verwenden kannst, musst du sie in deine eigene Codebasis einbinden. Dieser Abschnitt enthält verschiedene Beispiele für JWTs für jedes Szenario.

Funktionsweise von JWTs

Für nicht vertrauenswürdige Umgebungen wie Smartphones und Webbrowser stellt Ihr Backend-Server JWTs aus, die so funktionieren:

  • Der Clientcode, der in einer Umgebung mit geringem Vertrauen ausgeführt wird, ruft den Servercode auf, der in einer vollständig vertrauenswürdigen Umgebung ausgeführt wird, um das entsprechende JWT anzufordern, das an die Fleet Engine übergeben werden soll.

  • JWTs sind mit Dienstkonten verknüpft. Anfragen, die an die Fleet Engine gesendet werden, sind daher implizit mit dem Dienstkonto verknüpft, das das JWT signiert hat.

  • JWT-Ansprüche beschränken die Ressourcen, auf die der Client zugreifen darf, weiter, z. B. bestimmte Fahrzeuge, Fahrten oder Aufgaben.

Autorisierungsbibliothek für Java verwenden

Wenn Sie die Fleet Engine-Autorisierungsbibliothek für Java verwenden möchten, rufen Sie das GitHub-Repository auf. Die Bibliothek vereinfacht die Erstellung von Fleet Engine-JWTs und signiert sie sicher. Er bietet Folgendes:

  • Projektabhängigkeitserklärungen
  • Eine vollständige Liste aller Dienstkontorollen für Fahrten auf Abruf oder geplante Aufgaben
  • Andere Tokensignaturmechanismen als die Verwendung von Anmeldedatendateien, z. B. Identitätsdiebstahl für ein Dienstkonto
  • Hängt signierte Tokens an ausgehende Anfragen an, die entweder über einen gRPC-Stub oder eine GAPIC-Clientbibliothek (Google API Codegen) gesendet werden.
  • Anleitung zum Integrieren der Unterzeichner in Fleet Engine-Clientbibliotheken

Wenn Sie JWTs über Ihren Code ausstellen

Wenn Sie die Autorisierungsbibliothek für Java nicht verwenden können, müssen Sie JWTs in Ihrer eigenen Codebasis implementieren. In diesem Abschnitt finden Sie einige Richtlinien zum Erstellen eigener Tokens. Eine Liste der JWT-Felder und ‑Beanspruchungen finden Sie unter JSON Web Tokens im Abschnitt Sicherheit in der Fleet Engine. Informationen zu den von Fleet Engine verwendeten Dienstkontorollen finden Sie unter Dienstkontorollen. Im folgenden Abschnitt finden Sie eine Liste von JWT-Beispielen für Fahrten auf Abruf oder geplante Aufgaben.

Allgemeine Richtlinien

  • Verwenden Sie die richtigen Dienstkonten und Rollen. Das Dienstkonto und die zugehörige Rolle sorgen dafür, dass der Nutzer, der das Token anfordert, berechtigt ist, die Informationen aufzurufen, auf die ihm das Token Zugriff gewährt. Zum Beispiel:
    • Wenn du ein JWT signierst, das an ein Mobilgerät übergeben werden soll, verwende das Dienstkonto für die Rolle „Driver“ oder „Consumer SDK“. Andernfalls kann das Mobilgerät Daten ändern und auf Daten zugreifen, auf die es keinen Zugriff haben sollte.
    • Wenn Sie das JWT signieren, das für privilegierte Aufrufe verwendet werden soll, verwenden Sie bei Verwendung von ADCs oder JWTs das Dienstkonto mit der richtigen Rolle „Fleet Engine Admin“. Andernfalls schlägt der Vorgang fehl.
  • Teilen Sie nur die erstellten Tokens. Geben Sie die Anmeldedaten, die zum Erstellen der Tokens verwendet wurden, niemals weiter.
  • Bei gRPC-Aufrufen hängt der Mechanismus zum Anhängen des Tokens von der Sprache und dem Framework ab, das für den Aufruf verwendet wird. Um ein Token für einen HTTP-Aufruf anzugeben, muss ein Authorization-Header mit einem Bearer-Token enthalten sein, dessen Wert das Token ist.
  • Eine Ablaufzeit zurückgeben. Ihr Server muss ein Ablaufdatum für das Token zurückgeben, normalerweise in Sekunden.
  • Wenn Sie ein JSON-Objekt direkt als Tokeninhaber erstellen und signieren müssen, anstatt OAuth 2.0-Zugriffstokens zu verwenden, lesen Sie die Anleitung zur Autorisierung von Dienstkonten ohne OAuth in der Identity Developer-Dokumentation.

Für Fahrten auf Abruf

  • Fügen Sie beim Erstellen der JWT-Nutzlast im Abschnitt „Autorisierung“ einen zusätzlichen Anspruch hinzu, bei dem der Schlüssel vehicleid oder tripid auf den Wert der Fahrzeug- oder Fahrt-ID festgelegt ist, für die der Aufruf erfolgt.

Für geplante Aufgaben

  • Wenn Ihr Server andere APIs aufruft, müssen die Tokens auch den entsprechenden Anspruch enthalten. Gehen Sie dazu so vor:
    • Legen Sie für jeden Schlüssel den Wert * fest.
    • Gewähren Sie dem Nutzer Zugriff auf alle taskids und deliveryvehicleids. Dazu fügen Sie im Autorisierungsabschnitt einen zusätzlichen Anspruch mit den Schlüsseln taskid und deliveryvehicleid hinzu.
    • Wenn du das Sternchen (*) in der taskids-Anspruchsklasse verwendest, muss es das einzige Element im Array sein.

JWT-Beispiele für Fahrten auf Abruf

In diesem Abschnitt finden Sie JWT-Beispiele für gängige Szenarien, wenn Sie Fahrten auf Abruf nutzen.

Beispiel für ein Token für eine Aktion in einer Fahrer-App

{
  "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"
   }
}

Beispiel für ein Token für einen Vorgang in einer Verbraucher-App

{
  "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"
   }
}

JWT-Beispiele für geplante Aufgaben

In diesem Abschnitt finden Sie JWT-Beispiele für typische Szenarien, wenn Sie geplante Aufgaben verwenden.

Beispiel für ein Token für eine Fahrer-App

    {
      "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"
       }
    }

Beispiel für ein Token für eine Verbraucher-App

    {
      "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"
       }
    }

JWT-Beispiele für Flottenverwaltung

In diesem Abschnitt finden Sie ein JWT-Beispiel für ein typisches Szenario bei Flottenoperationen.

Beispiel für ein Token zum Nachverfolgen aller Aufgaben und Fahrzeuge in einer Flotte

Das folgende Beispiel ist ein Token, mit dem alle Aufgaben und Fahrzeuge in der Flotte über eine webbasierte App eines Betreibers erfasst werden. Für diese Vorgänge sind mehr Berechtigungen erforderlich als für Clientanwendungen. Informationen zur clientseitigen Implementierung, bei der dieses Token verwendet wird, finden Sie unter JavaScript-Fleet Tracking Library einrichten:

  • Unterschreiben Sie das Token mit der Cloud IAM-Rolle Fleet Engine Delivery Fleet Reader.

   {
      "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": "*",
       }
    }

Alternative Authentifizierungsmethode für Back-End-Servervorgänge

Google empfiehlt, Standardanmeldedaten für Anwendungen (Application Default Credentials, ADC) zur Authentifizierung von Backend-Server-Vorgängen zu verwenden. Wenn Sie ADC nicht verwenden können und JWTs verwenden müssen, sehen Sie sich diese Beispiele an.

Beispiel für ein Token für einen On-Demand-Backend-Servervorgang

  {
    "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": "*"
     }
  }
  

Beispiel für ein Token für einen geplanten Backend-Servervorgang

    {
      "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": "*"
       }
    }
   

Beispiel für ein Token für einen geplanten Vorgang zum Batch-Erstellen von Aufgaben auf dem Backend-Server

    {
      "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": ["*"]
       }
    }
  

Beispiel für ein Token für einen geplanten Vorgang für ein Übermittlungsmedium auf dem Backend-Server

    {
      "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": "*"
       }
    }
  

Nächste Schritte

  • Prüfen Sie die Einrichtung, damit Sie ein Testfahrzeug erstellen und dafür sorgen können, dass Ihre Tokens wie vorgesehen funktionieren.
  • Informationen zur Verwendung von ADC anstelle von JWTs für Back-End-Server-Vorgänge finden Sie in der Sicherheitsübersicht.