Problema con i token web JSON

Questo documento spiega come emettere token web JSON per consentire alle app web e mobile di accedere ai dati di Fleet Engine. Se non lo hai già fatto, leggi la sezione JSON Web Tokens (Token web JSON) 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 il tuo codebase è scritto in Java. Questa libreria gestisce i JWT di emissione 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 integrarli nel tuo codice di base. Questa sezione fornisce i vari esempi di JWT per ogni scenario.

Come funzionano i JWT

In ambienti non attendibili, come cellulari e browser web, il server di backend 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 associate all'account di servizio che ha firmato il JWT.

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

Utilizza la libreria delle autorizzazioni per Java

Per utilizzare la libreria di autorizzazione di Fleet Engine per Java, visita il repository GitHub. La libreria semplifica la costruzione 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 viaggi on demand o attività pianificate
  • Meccanismi di firma dei token diversi dall'uso di file di credenziali, ad esempio il furto dell'identità
  • Allega token firmati alle richieste in uscita effettuate da uno stub gRPC o da una libreria client Google API Codegen (GAPIC)
  • Istruzioni sull'integrazione dei firmatari con le librerie client di Fleet Engine

Se emetti JWT dal 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 creare i tuoi token. Consulta la pagina relativa ai token web JSON nella sezione Security in Fleet Engine per un elenco di campi e attestazioni JWT. Consulta Ruoli account di servizio per i ruoli dell'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 il ruolo associato assicurano che l'utente che richiede il token sia autorizzato a visualizzare le informazioni a cui il token gli concede l'accesso. In particolare:
    • Se firmi un JWT da passare a un dispositivo mobile, utilizza l'account di servizio per il ruolo SDK Driver o Consumer. In caso contrario, il dispositivo mobile può modificare e accedere a dati a cui non dovrebbe avere accesso.
    • Se firmi il JWT da utilizzare per le chiamate con privilegi, utilizza l'account di servizio con il ruolo di amministratore di 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 il collegamento del token dipende dal linguaggio 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 rappresentazione il cui valore è il token.
  • Restituire 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 portatore del token, anziché utilizzare i token di accesso OAuth 2.0, leggi le istruzioni per l'autorizzazione dell'account di servizio senza OAuth nella documentazione di Identity Developer.

Per viaggi on demand

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

Per attività pianificate

  • Quando il server chiama altre API, anche i token devono contenere 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. Per farlo, aggiungi un'altra rivendicazione nella sezione di autorizzazione con le chiavi taskid e deliveryvehicleid.
    • Quando utilizzi l'asterisco (*) nella rivendicazione taskids, deve essere l'unico elemento nell'array.

Esempi di JWT per viaggi on demand

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

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

Token di esempio per un'app del conducente

    {
      "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 del parco veicoli.

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

L'esempio seguente è un token che monitora tutte le attività e i veicoli nel parco risorse da un'app basata sul web utilizzata da un operatore. Le autorizzazioni richieste per queste operazioni sono maggiori di quelle richieste per le applicazioni client. Consulta Configurare la libreria di monitoraggio del parco risorse JavaScript per l'implementazione lato client che utilizza questo token:

  • 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 i 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 di creazione batch delle 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 del server di backend pianificata 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