Problema con i token web JSON

Questo documento spiega come emettere token web JSON durante l'attivazione del tuo traffico web. l'accesso alle app mobile e ai dati di Fleet Engine. Se non lo hai già fatto leggi JSON Web Tokens nella sezione Security in Fleet Engine. . Con il servizio Fleet Engine, puoi emettere JWT in uno dei seguenti modi:

  • Utilizza la libreria di autorizzazione: Google consiglia di utilizzare questo approccio quando la base di codice è scritta in Java. Questa libreria gestisce i JWT di emissione per caso d'uso di tutti i casi d'uso di cui potresti aver bisogno con il servizio e semplifica l'implementazione.
  • Creare i tuoi JWT: se non puoi utilizzare la nostra libreria JWT, dovrai nel tuo codebase. Questa sezione illustra i vari di JWT per ogni scenario.

Come funzionano i JWT

Per ambienti non attendibili, come cellulari e browser web, il backend il server emette JWT che funzionano come segue:

  • Il codice client in esecuzione in un ambiente con attendibilità ridotta chiama il codice del server in esecuzione in un ambiente completamente attendibile per richiedere il JWT appropriato da passare a Fleet Engine.

  • I JWT sono associati agli account di servizio, quindi le richieste inviate a Fleet Engine sono implicitamente associati all'account di servizio che ha firmato il JWT.

  • Le attestazioni JWT limitano ulteriormente le risorse su cui il client può operare, ad esempio veicoli, viaggi o attività specifici.

Utilizzare la libreria di autorizzazione per Java

Per utilizzare la libreria di autorizzazione di Fleet Engine per Java, visita il repository GitHub. La libreria semplifica la creazione dei JWT di Fleet Engine e li firma in modo sicuro. Fornisce quanto segue:

  • Dichiarazioni di dipendenza del progetto
  • Un elenco completo di tutti i ruoli degli account di servizio per le corse on demand attività pianificate
  • Meccanismi di firma dei token diversi dall'utilizzo di file di credenziali, come la rappresentazione di un account di servizio
  • Collega i token firmati alle richieste in uscita effettuate da uno stub gRPC o una libreria client GAPIC (Google API Codegen)
  • Istruzioni sull'integrazione dei firmatari con le librerie client di Fleet Engine

Se emetti JWT dal codice

Se non è possibile utilizzare la libreria di autorizzazione per Java, è necessario implementare JWT in il tuo codebase. Questa sezione fornisce alcune linee guida per creare di token. Vedi JSON Web Token nella sezione Security in Fleet Engine per un elenco di campi e rivendicazioni JWT. Vedi Account di servizio ruoli per i ruoli degli account di servizio utilizzati da Fleet Engine. Consulta la sezione seguente per un elenco di esempi di JWT per viaggi on demand o attività pianificate.

Linee guida generali

  • Utilizza account di servizio e ruoli appropriati. L'account di servizio e assicura che l'utente che richiede il token sia autorizzato a visualizzare le informazioni a cui il token concede l'accesso. Nello specifico:
    • Se firma un JWT da trasmettere a un dispositivo mobile, utilizza il servizio per il ruolo Driver o Consumer SDK. Altrimenti, lo smartphone Il dispositivo può modificare e accedere a dati a cui non dovrebbe avere accesso.
    • Se firma il JWT da utilizzare per le chiamate con privilegi, utilizza il servizio con il ruolo Amministratore Fleet Engine corretto quando si utilizzano ADC o JWT. In caso contrario, l'operazione non andrà a buon fine.
  • Condividi solo i token creati. Non condividere mai le credenziali utilizzate per e creare i token.
  • Per le chiamate gRPC, il meccanismo di attacco del token dipende dal linguaggio e dal framework utilizzati per effettuare la chiamata. Il meccanismo per specificare un a una chiamata HTTP prevede l'inclusione di un'intestazione Authorization con una connessione il cui valore è il token.
  • Restituisci una data di scadenza. Il server deve restituire una data di scadenza per il token, in genere in secondi.
  • Se devi creare e firmare un file JSON direttamente come porta token, anziché rispetto all'utilizzo dei token di accesso OAuth 2.0, leggi le istruzioni per la sezione Servizio autorizzazione dell'account senza OAuth nell'identità documentazione per gli sviluppatori.

Per viaggi on demand

  • Quando crei il payload JWT, aggiungi un'altra attestazione nell'autorizzazione con la chiave vehicleid o tripid impostata sul valore del veicolo ID o ID corsa per cui viene effettuata la chiamata.

Per attività pianificate

  • Quando il server chiama altre API, i token devono contenere anche la dichiarazione appropriata. A questo scopo, puoi:
    • Imposta il valore di ogni chiave su *.
    • Concedi all'utente l'accesso a tutti i dati di taskids e deliveryvehicleids. Da fare aggiungi un altro reclamo nella sezione Autorizzazione con tasti taskid e deliveryvehicleid.
    • Se utilizzi l'asterisco (*) nella dichiarazione taskids, deve essere il solo elemento dell'array.

Esempi di JWT per viaggi on demand

Questa sezione fornisce esempi di JWT per scenari comuni se utilizzi i modelli per i viaggi.

Token di esempio per un'operazione dell'app del conducente

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

Token di esempio per un'operazione dell'app consumer

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

Esempi di JWT per attività pianificate

Questa sezione fornisce un esempio JWT per scenari tipici se utilizzi la pianificazione attività di machine learning.

Token di esempio per un'app di guida

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

Token di esempio per un'app per consumatori

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

Esempi di JWT per le operazioni del parco risorse

Questa sezione fornisce un esempio di JWT per uno scenario tipico nelle operazioni del parco risorse.

Token di esempio per monitorare tutte le attività e i veicoli di una flotta

L'esempio seguente è un token che tiene traccia di tutte le attività e tutti i veicoli nella da un'app basata sul web usata da un operatore. Le autorizzazioni richieste per queste operazioni è maggiore di quello delle applicazioni client. Consulta Configurare la libreria di monitoraggio della flotta JavaScript per l'implementazione lato client che utilizzerà questo token:

  • Firma il token utilizzando il ruolo IAM Cloud 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": "*",
       }
    }

Metodo di autenticazione alternativo per le operazioni del server di backend

Google consiglia di utilizzare ADC per autenticare le operazioni del server di backend. Se non puoi utilizzare gli ADC e devi usare JWT, fai riferimento a questi esempi.

Token di esempio per un'operazione del server di backend on demand

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

Token di esempio per un'operazione del server di backend pianificata

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

Token di esempio per un'operazione di creazione in batch di attività del server di backend pianificato

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

Token di esempio per un'operazione del server di backend pianificato per ogni operazione di consegna veicolo

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

Passaggi successivi