In diesem Dokument wird beschrieben, wie Sie JSON Web Tokens ausstellen, um Ihren web- und mobilbasierten Apps Zugriff auf Fleet Engine-Daten zu ermöglichen. Wenn Sie das noch nicht getan haben, lesen Sie den Abschnitt JSON Web Tokens unter Sicherheit in Fleet Engine. Mit dem Fleet Engine-Dienst können Sie JWTs auf eine der folgenden Arten ausstellen:
- Autorisierungsbibliothek verwenden: Google empfiehlt diesen Ansatz, wenn Ihre Codebasis in Java geschrieben ist. Diese Bibliothek stellt JWTs für alle Anwendungsfälle aus, die Sie möglicherweise mit dem Dienst benötigen, und vereinfacht die Implementierung erheblich.
- Eigene JWTs erstellen: Wenn Sie unsere JWT-Bibliothek nicht verwenden können, müssen Sie diese in Ihre eigene Codebasis einbauen. In diesem Abschnitt finden Sie verschiedene Beispiele für JWTs für jedes Szenario.
Funktionsweise von JWTs
Für nicht vertrauenswürdige Umgebungen wie Mobiltelefone und Webbrowser stellt Ihr Back-End-Server JWTs aus, die so funktionieren:
Ihr Clientcode, der in einer Umgebung mit geringem Vertrauensgrad ausgeführt wird, ruft Ihren Servercode auf, der in einer Umgebung mit hohem Vertrauensgrad ausgeführt wird, um das entsprechende JWT anzufordern, das an Fleet Engine übergeben werden soll.
JWTs sind mit Dienstkonten verknüpft. Anfragen, die an Fleet Engine gesendet werden, sind daher implizit mit dem Dienstkonto verknüpft, das das JWT signiert hat.
JWT-Anforderungen schränken die Ressourcen weiter ein, mit denen der Client arbeiten kann, 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. Sie bietet Folgendes:
- Deklarationen von Projektabhängigkeiten
- Eine vollständige Liste aller Dienstkontorollen für On-Demand-Fahrten oder geplante Aufgaben
- Andere Mechanismen zur Tokensignierung als die Verwendung von Anmeldedatendateien, z. B. die Identitätsübernahme eines Dienstkontos
- Signierte Tokens werden an ausgehende Anfragen angehängt, die entweder von einem gRPC-Stub oder einer Google API Codegen-Clientbibliothek (GAPIC) stammen.
- Anleitung zum Einbinden der Signierer in Fleet Engine-Clientbibliotheken
JWTs aus Ihrem 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 -Anforderungen finden Sie im Abschnitt JSON Web Tokens unter Sicherheit in Fleet Engine. Informationen zu den von Fleet Engine verwendeten Dienstkontorollen finden Sie unter Dienstkontorollen. Im folgenden Abschnitt finden Sie eine Liste mit JWT-Beispielen für On-Demand-Fahrten oder geplante Aufgaben.
Allgemeine Richtlinien
- Verwenden Sie die entsprechenden 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 er mit dem Token Zugriff erhält. Zum Beispiel:
- Wenn Sie ein JWT signieren, das an ein Mobilgerät übergeben werden soll, verwenden Sie das Dienst konto für die Rolle des 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 für privilegierte Aufrufe signieren, verwenden Sie das Dienst konto mit der richtigen Fleet Engine-Administratorrolle, wenn Sie ADC oder JWTs verwenden. Andernfalls schlägt der Vorgang fehl.
- Geben Sie nur die erstellten Tokens weiter. 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. Der Mechanismus zum Angeben eines Tokens für einen HTTP-Aufruf besteht darin, einen
Authorization-Header mit einem Inhabertoken einzufügen, dessen Wert das Token ist. - Geben Sie eine Ablaufzeit zurück. Ihr Server muss eine Ablaufzeit für das Token zurückgeben, in der Regel in Sekunden.
- Wenn Sie ein JSON direkt als Tokeninhaber erstellen und signieren müssen, anstatt OAuth 2.0-Zugriffstokens zu verwenden, lesen Sie die Anleitung unter Dienstkontoautorisierung ohne OAuth in der Identity-Entwicklerdokumentation.
Für On-Demand-Fahrten
- Fügen Sie beim Erstellen der JWT-Nutzlast im Autorisierungsabschnitt eine zusätzliche Anforderung mit dem Schlüssel
vehicleidodertripidhinzu, der auf den Wert der Fahrzeug-ID oder der 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 die entsprechende Anforderung enthalten. Dazu haben Sie folgende Möglichkeiten:
- Legen Sie den Wert jedes Schlüssels auf
*fest. - Gewähren Sie dem Nutzer Zugriff auf alle
taskidsunddeliveryvehicleids. Fügen Sie dazu im Autorisierungsabschnitt eine zusätzliche Anforderung mit den Schlüsselntaskidunddeliveryvehicleidhinzu. - Wenn Sie das Sternchen (
*) in der Anforderungtaskidsverwenden, muss es das einzige Element im Array sein.
- Legen Sie den Wert jedes Schlüssels auf
JWT-Beispiele für On-Demand-Fahrten
In diesem Abschnitt finden Sie JWT-Beispiele für häufige Szenarien, wenn Sie On-Demand-Fahrten verwenden.
Beispieltoken für einen Vorgang in der 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"
}
}
Beispieltoken für einen Vorgang in der Nutzer-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.
Beispieltoken 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"
}
}
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
In diesem Abschnitt finden Sie ein JWT-Beispiel für ein typisches Szenario bei Flottenvorgängen.
Beispieltoken zum Verfolgen aller Aufgaben und Fahrzeuge in einer Flotte
Im folgenden Beispiel wird ein Token verwendet, mit dem alle Aufgaben und Fahrzeuge in der Flotte über eine webbasierte App verfolgt werden, die von einem Betreiber verwendet wird. Die für diese Vorgänge erforderlichen Berechtigungen sind höher als für Clientanwendungen. Informationen zur clientseitigen Implementierung, bei der dieses Token verwendet wird, finden Sie unter JavaScript-Bibliothek für die Flottenverfolgung einrichten:
Signieren 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, ADC zur Authentifizierung von Back-End-Servervorgängen zu verwenden. Wenn Sie ADC nicht verwenden können und JWTs verwenden müssen, sehen Sie sich diese Beispiele an.
Beispieltoken für einen On-Demand-Back-End-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 Back-End-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": "*" } }
Beispieltoken für einen geplanten Back-End-Servervorgang zum Erstellen von Aufgaben im Batch
{ "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 Back-End-Servervorgang pro Lieferfahrzeug
{ "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
- Überprüfen Sie Ihre Einrichtung, damit Sie ein Testfahrzeug erstellen und sicherstellen können, dass Ihre Tokens wie vorgesehen funktionieren.
- Informationen zur Verwendung von ADC anstelle von JWTs für Back-End-Servervorgänge, siehe die Sicherheitsübersicht.