Émettre des jetons Web JSON

Ce document explique comment émettre des jetons Web JSON dans le cadre de l'activation de votre et les applications mobiles aux données Fleet Engine. Si vous ne l'avez pas encore fait consultez la section Jetons Web JSON de la section Sécurité dans Fleet Engine . Avec le service Fleet Engine, vous pouvez émettre des jetons JWT de l'une des manières suivantes :

  • Utilisez la bibliothèque d'autorisations : Google vous recommande d'utiliser cette approche. lorsque votre codebase est écrit en Java. Cette bibliothèque gère l'émission de jetons JWT pour tous les scénarios d'utilisation dont vous pourriez avoir besoin avec le service et simplifie grandement votre implémentation.
  • Créez vos propres jetons JWT : si vous ne pouvez pas utiliser notre bibliothèque JWT, vous devrez les intégrer à votre propre codebase. Cette section fournit les différents de jetons JWT pour chaque scénario.

Fonctionnement des jetons JWT

Pour les environnements non approuvés, tels que les téléphones mobiles et les navigateurs Web, votre serveur backend émet des JWT qui fonctionnent comme suit :

  • Votre code client exécuté dans un environnement à faible confiance appelle votre code serveur exécuté dans un environnement entièrement sécurisé pour demander le jeton JWT approprié à transmettre à Fleet Engine.

  • Les jetons JWT étant associés aux comptes de service, les requêtes envoyées à Fleet Engine sont implicitement associés au compte de service qui a signé le jeton JWT.

  • Les revendications JWT limitent davantage les ressources sur lesquelles le client peut opérer. tels que des véhicules, des trajets ou des tâches spécifiques.

Utiliser la bibliothèque d'autorisation pour Java

Pour utiliser la bibliothèque d'autorisation Fleet Engine pour Java, consultez la page GitHub un dépôt de clés. La bibliothèque simplifie la construction de Fleet Engine JWT et les signe de façon sécurisée. Il fournit les éléments suivants:

  • Déclarations de dépendances de projet
  • Liste complète de tous les rôles de compte de service pour les trajets à la demande ou les tâches planifiées
  • Mécanismes de signature de jetons autres que l'utilisation de fichiers d'identifiants, tels que l'usurpation d'identité d'un compte de service
  • associe des jetons signés à des requêtes sortantes effectuées à partir d'un bouchon gRPC ou Une bibliothèque cliente GAPIC (Google API Codegen)
  • Instructions pour intégrer les signataires aux bibliothèques clientes Fleet Engine

Si vous émettez des jetons JWT à partir de votre code

Si vous ne pouvez pas utiliser la bibliothèque d'autorisation pour Java, vous devez implémenter des jetons JWT dans votre propre codebase. Cette section fournit quelques consignes pour créer vos propres de jetons. Consultez la section Jetons Web JSON de la section Sécurité dans Fleet Engine. pour obtenir la liste des champs et revendications JWT. Voir Compte de service rôles pour les rôles de compte de service utilisés par Fleet Engine. Voir la section suivante afin d'obtenir une liste d'exemples de jetons JWT pour les trajets à la demande ou les tâches planifiées.

Consignes générales

  • Utilisez les comptes de service et les rôles appropriés. Le compte de service associé garantit que l'utilisateur qui demande le jeton est autorisé à voir les informations auxquelles le jeton leur donne accès. Plus précisément :
    • Si vous signez un jeton JWT à transmettre à un appareil mobile, utilisez le service. pour le rôle "Pilote" ou "SDK client". Sinon, le mobile appareil peut modifier et accéder aux données auxquelles il ne devrait pas avoir accès.
    • Si vous signez le jeton JWT à utiliser pour les appels privilégiés, utilisez le compte de service avec le rôle Administrateur du moteur de flotte approprié lorsque vous utilisez des ADC ou des jetons JWT. Sinon, l'opération échoue.
  • Ne partagez que les jetons créés. Ne partagez jamais les identifiants utilisés pour créer les jetons.
  • Pour les appels gRPC, le mécanisme d'association du jeton dépend du et le framework utilisés pour passer l'appel. Le mécanisme permettant de spécifier un jeton à un appel HTTP consiste à inclure un en-tête Authorization avec un jeton porteur dont la valeur est le jeton.
  • Renvoyez un délai d'expiration. Votre serveur doit renvoyer une date d'expiration pour le jeton, généralement en secondes.
  • Si vous devez créer et signer un fichier JSON directement en tant que porteur de jetons, que les jetons d'accès OAuth 2.0, lisez les instructions relatives au service autorisation de compte sans OAuth dans l'identité Documentation pour les développeurs.

Pour les trajets à la demande

  • Lors de la création de la charge utile JWT, ajoutez une revendication supplémentaire dans l'autorisation avec la clé vehicleid ou tripid définie sur la valeur du véhicule Identifiant ou identifiant du trajet pour lequel l'appel est effectué.

Pour les tâches planifiées

  • Lorsque votre serveur appelle d'autres API, les jetons doivent également contenir la revendication appropriée. Pour ce faire, procédez comme suit:
    • Définissez la valeur de chaque clé sur *.
    • Accordez à l'utilisateur l'accès à tous les taskids et deliveryvehicleids. Pour ce faire, ajoutez une revendication supplémentaire dans la section d'autorisation avec les clés taskid et deliveryvehicleid.
    • Lorsque vous utilisez l'astérisque (*) dans la revendication taskids, il doit s'agir de la seul élément du tableau.

Exemples de jetons JWT pour les trajets à la demande

Cette section fournit des exemples de JWT pour des scénarios courants si vous utilisez des trajets à la demande.

Exemple de jeton pour une opération d'application de pilote

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

Exemple de jeton pour une opération d'application grand public

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

Exemples de jetons JWT pour les tâches planifiées

Cette section fournit un exemple de jeton JWT pour les scénarios courants si vous utilisez des jetons tâches.

Exemple de jeton pour une application de conducteur

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

Exemple de jeton pour une application consommateur

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

Exemples de jetons JWT pour les opérations de parc

Cette section fournit un exemple de JWT pour un scénario typique dans les opérations de parc.

Exemple de jeton pour suivre toutes les tâches et tous les véhicules d'un parc

L'exemple suivant est un jeton qui suit toutes les tâches et tous les véhicules de la flotte à partir d'une application Web utilisée par un opérateur. Les autorisations requises pour ces opérations sont plus nombreuses que pour les applications clientes. Voir Configurer la bibliothèque JavaScript Fleet Tracking côté client qui utilise ce jeton:

  • Signez le jeton à l'aide du rôle 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": "*",
       }
    }

Autre méthode d'authentification pour les opérations du serveur backend

Google recommande d'utiliser ADC pour authentifier les opérations du serveur backend. Si vous ne pouvez pas utiliser les identifiants par défaut de l'application et que vous devez utiliser des jetons JWT, consultez ces exemples.

Exemple de jeton pour une opération de serveur backend à la demande

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

Exemple de jeton pour une opération planifiée du serveur 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": "*"
       }
    }
   

Exemple de jeton pour une opération de création par lot de tâches de serveur backend programmée

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

Exemple de jeton pour une opération de serveur backend planifiée par véhicule de livraison

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

Étape suivante

  • Vérifiez votre configuration afin de pouvoir créer un véhicule d'essai et vous assurer que vos jetons fonctionnent comme prévu.
  • Pour en savoir plus sur l'utilisation des identifiants par défaut de l'application au lieu des jetons JWT pour les opérations de serveur backend, consultez la section Présentation de la sécurité.