JSON-Webtokens ausstellen

In diesem Dokument erfahren Sie, wie Sie JSON Web Tokens im Rahmen der Aktivierung Ihres und mobilen Apps Zugriff auf Fleet Engine-Daten. Falls noch nicht geschehen lesen Sie bereits JSON Web Tokens im Abschnitt Security in Fleet Engine (Sicherheit in Fleet Engine). . Mit dem Fleet Engine-Dienst können Sie JWTs auf folgende Arten ausstellen:

  • Autorisierungsbibliothek verwenden: Google empfiehlt diese Vorgehensweise. 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 in Ihre eigene Codebasis integrieren. Dieser Abschnitt enthält die verschiedenen 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:

  • Ihr Clientcode, der in einer Umgebung mit wenig Vertrauen ausgeführt wird, ruft auf Ihrem Server auf Code, der in einer vollständig vertrauenswürdigen Umgebung ausgeführt wird, um das entsprechende JWT anzufordern an Fleet Engine übergeben werden.

  • JWTs sind mit Dienstkonten verknüpft. Anfragen, die an die Fleet Engine gesendet werden, sind also 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

Informationen zur Verwendung der Fleet Engine-Autorisierungsbibliothek für Java finden Sie im GitHub . Die Bibliothek vereinfacht das Erstellen von Fleet Engine JWTs erstellen und sicher signieren. Sie enthält Folgendes:

  • Deklarationen für Projektabhängigkeiten
  • Eine vollständige Liste aller Dienstkontorollen für On-Demand-Fahrten 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 von einem gRPC-Stub oder eine GAPIC-Clientbibliothek (Google API Codegen)
  • Anleitung zum Integrieren der Unterzeichner in Fleet Engine-Clientbibliotheken

Wenn Sie JWTs über Ihren Code ausgeben

Wenn Sie die Autorisierungsbibliothek für Java nicht verwenden können, müssen Sie JWTs in Ihrer eigenen Codebasis implementieren. Dieser Abschnitt enthält einige Richtlinien zum Erstellen eigener Tokens. Weitere Informationen finden Sie unter JSON Web Tokens im Abschnitt Sicherheit in Fleet Engine. für eine Liste der JWT-Felder und -Anforderungen. Informationen zu den von Fleet Engine verwendeten Dienstkontorollen finden Sie unter Dienstkontorollen. Weitere Informationen finden Sie unter finden Sie im folgenden Abschnitt eine Liste mit JWT-Beispielen 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 wird das mobile Daten, auf die es keinen Zugriff haben sollte, ändern und auf sie zugreifen kann.
    • 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 für Erstellen Sie die Tokens.
  • Bei gRPC-Aufrufen hängt der Mechanismus zum Anhängen des Tokens vom Sprache und Framework, die für den Anruf verwendet wurden. Der Mechanismus zum Angeben eines Token für einen HTTP-Aufruf besteht darin, einen Authorization-Header mit einem Träger einzufügen. Token, dessen Wert das Token ist.
  • Geben Sie eine Ablaufzeit zurück. Ihr Server muss eine Ablaufzeit für die Tokens, normalerweise in Sekunden.
  • Wenn Sie ein JSON-Format direkt als Token-Inhaber erstellen und signieren müssen, statt OAuth 2.0-Zugriffstokens verwenden, lesen Sie die Anleitung für den Service Kontoautorisierung ohne OAuth in der Entwicklerdokumentation

Für On-Demand-Reisen

  • Fügen Sie beim Erstellen der JWT-Nutzlast in der Autorisierung eine zusätzliche Anforderung hinzu. Abschnitt mit dem Schlüssel vehicleid oder tripid, der auf den Wert des Fahrzeugs festgelegt ist ID oder Fahrt-ID, für die der Aufruf erfolgt.

Für geplante Aufgaben

  • Wenn Ihr Server andere APIs aufruft, müssen die Token auch den Parameter begründeten Anspruch. Dazu haben Sie folgende Möglichkeiten:
    • 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 Sie das Sternchen (*) in der taskids-Anforderung verwenden, muss es der das einzige Element im Array.

JWT-Beispiele für On-Demand-Fahrten

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

Dieser Abschnitt enthält ein JWT-Beispiel für typische Szenarien, wenn Sie geplante Aufgaben.

Beispieltoken für eine Treiber-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"
       }
    }

Beispieltoken für eine Nutzer-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 Flottenvorgänge

Dieser Abschnitt enthält ein JWT-Beispiel für ein typisches Szenario im Flottenbetrieb.

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

Das folgende Beispiel ist ein Token, das alle Aufgaben und Fahrzeuge in der über eine webbasierte App, die von einem Bediener genutzt wird. Für diese Vorgänge sind mehr Berechtigungen erforderlich als für Clientanwendungen. Weitere Informationen finden Sie unter Richten Sie die JavaScript-Flotten-Tracking-Bibliothek auf Clientseite ein. Implementierung, die dieses Token verwenden würde:

  • 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 Backend-Servervorgänge

Google empfiehlt, Standardanmeldedaten für Anwendungen (Application Default Credentials, ADC) zur Authentifizierung von Backend-Server-Vorgängen zu verwenden. Wenn Sie können ADC nicht verwenden und müssen JWTs verwenden. 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": "*"
     }
  }
  

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

Beispieltoken für einen geplanten Backend-Server pro Auslieferungsfahrzeugvorgang

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