Problema con i token web JSON

Questo documento illustra come emettere token web JSON nell'ambito dell'attivazione dell'accesso delle tue app web e mobile ai dati di Fleet Engine. Se non l'hai ancora fatto, leggi Token web JSON nella sezione Sicurezza 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 il codebase è scritto in Java. Questa libreria gestisce l'emissione di JWT per tutti gli scenari di casi d'uso di cui potresti aver bisogno con il servizio e semplifica notevolmente l'implementazione.
  • Crea i tuoi JWT: se non puoi utilizzare la nostra libreria JWT, dovrai incorporarli nel tuo codebase. Questa sezione fornisce i vari esempi di JWT per ogni scenario.

Come funzionano i JWT

Per gli ambienti non attendibili, come i cellulari e i browser web, il server di backend emette JWT che funzionano nel seguente modo:

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

  • I JWT sono associati ai service account, quindi le richieste inviate a Fleet Engine sono implicitamente associate al service account che ha firmato il JWT.

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

Utilizzare la libreria di autorizzazione per Java

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

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

Se emetti JWT dal tuo codice

Se non puoi utilizzare la libreria di autorizzazione per Java, devi implementare i JWT nel tuo codebase. Questa sezione fornisce alcune linee guida per la creazione dei tuoi token. Consulta la sezione Token web JSON nella sezione Sicurezza in Fleet Engine per un elenco di campi e attestazioni JWT. Consulta Ruoli del service account per i ruoli del service account 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 service account e ruoli appropriati. Il service account e il ruolo associato garantiscono che l'utente che richiede il token sia autorizzato a visualizzare le informazioni a cui il token concede l'accesso. In particolare:
    • Se firmi un JWT da trasmettere a un dispositivo mobile, utilizza il service account per il ruolo SDK Driver o Consumer. In caso contrario, il dispositivo mobile può alterare e accedere a dati a cui non dovrebbe avere accesso.
    • Se firmi il JWT da utilizzare per le chiamate con privilegi, utilizza il service account con il ruolo Amministratore Fleet Engine corretto quando utilizzi 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 creare i token.
  • Per le chiamate gRPC, il meccanismo per allegare il token dipende dalla lingua e dal framework utilizzati per effettuare la chiamata. Il meccanismo per specificare un token per una chiamata HTTP consiste nell'includere un'intestazione Authorization con un token di autenticazione il cui valore è il token.
  • Restituisci un'ora di scadenza. Il server deve restituire un tempo di scadenza per il token, in genere in secondi.
  • Se devi creare e firmare un JSON direttamente come token bearer, anziché utilizzare token di accesso OAuth 2.0, leggi le istruzioni per l'autorizzazione dell'account di servizio senza OAuth nella documentazione per gli sviluppatori di Identity.

Per le corse on demand

  • Quando crei il payload JWT, aggiungi un'ulteriore rivendicazione nella sezione di autorizzazione con la chiave vehicleid o tripid impostata sul valore dell'ID veicolo o dell'ID viaggio per cui viene effettuata la chiamata.

Per le attività pianificate

  • Quando il server chiama altre API, i token devono contenere anche l'attestazione appropriata. Per farlo, puoi procedere nel seguente modo:
    • Imposta il valore di ogni chiave su *.
    • Concedere all'utente l'accesso a tutti i taskids e deliveryvehicleids. Per farlo, aggiungi un'ulteriore rivendicazione nella sezione di autorizzazione con le chiavi taskid e deliveryvehicleid.
    • Quando utilizzi l'asterisco (*) nell'attestazione taskids, deve essere l'unico elemento dell'array.

Esempi di JWT per le corse on demand

Questa sezione fornisce esempi di JWT per scenari comuni se utilizzi viaggi on demand.

Token di esempio per un'operazione dell'app per i conducenti

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

Esempio di token 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 di JWT per scenari tipici se utilizzi attività pianificate.

Token di esempio per un'app per i conducenti

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

    {
      "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 della flotta.

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 di tutti i veicoli della flotta da un'app basata sul web utilizzata da un operatore. Le autorizzazioni richieste per queste operazioni sono maggiori rispetto a quelle per le applicazioni client. Per l'implementazione lato client che utilizzerebbe questo token, consulta Configurare la libreria di monitoraggio della flotta JavaScript:

  • Firma il token utilizzando il ruolo Cloud IAM 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 ADC e devi utilizzare JWT, consulta 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 pianificata del server di backend

    {
      "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 batch di creazione di attività 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": {
         "taskids": ["*"]
       }
    }
  

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

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