É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 différentes manières:

  • Utilisez la bibliothèque d'autorisations : Google vous recommande d'utiliser cette approche pour les cas suivants : votre codebase est écrit en Java. Cette bibliothèque gère l'émission de jetons JWT pour tous de cas d'utilisation dont vous pourriez avoir besoin avec le service et simplifie considérablement la mise en œuvre.
  • Créer vos propres jetons JWT : si vous ne pouvez pas utiliser notre bibliothèque JWT, vous devez les créer dans votre propre codebase. Cette section fournit les différents exemples de jetons JWT pour chaque scénario.

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 du projet
  • Liste complète de tous les rôles des comptes de service pour les trajets à la demande ou les trajets planifiés tâches
  • Mécanismes de signature de jetons autres que l'utilisation de fichiers d'identifiants, tels que empruntant l'identité d'un compte de service
  • Associe des jetons signés à des requêtes sortantes effectuées à partir d'un bouchon gRPC ou d'une Client GAPIC
  • Instructions pour intégrer les signataires aux bibliothèques clientes Fleet Engine

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

Lorsque 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 votre vos propres jetons. Consultez la section Jetons Web JSON de la section Sécurité dans Fleet Engine. pour obtenir la liste des rôles de compte de service, ainsi que des champs et revendications JWT. 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 rôles appropriés. Cela garantit que l'utilisateur qui demande le jeton autorisés à afficher les informations auxquelles le jeton leur donne accès. Plus précisément :
    • Lorsque vous signez le jeton JWT à transmettre à un appareil mobile, utilisez le service le rôle "Pilote" ou "SDK client". Dans le cas contraire, l'appareil pourra modifier l'état qu'il ne devrait pas avoir.
    • De même, lorsque vous signez le jeton JWT à utiliser pour les appels privilégiés, assurez-vous de utilisez le compte de service avec le rôle d'administrateur Fleet Engine approprié. Sinon, l'opération échouera.
  • 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 une à un appel HTTP consiste à inclure un en-tête Authorization avec un support jeton dont la valeur est le jeton.
  • Renvoyez un délai d'expiration. Votre serveur doit renvoyer un délai d'expiration pour le , généralement en secondes.
  • À créer et signer un fichier JSON directement en tant que porteur de jetons, plutôt que d'utiliser Pour les jetons d'accès OAuth 2.0, consultez les instructions relatives aux comptes de service l'autorisation sans OAuth dans Identity Developer dans la documentation Google Cloud.

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 le paramètre la revendication appropriée. Pour ce faire, procédez comme suit: <ph type="x-smartling-placeholder">
      </ph>
    • Définissez la valeur de chaque clé sur *.
    • Accordez à l'utilisateur l'accès à tous les taskids et deliveryvehicleids. À faire une revendication supplémentaire dans la section des autorisations 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 jetons JWT pour des scénarios courants si vous utilisez un système à la demande trajets.

Exemple de jeton pour une opération de 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": {
     "vehicleid": "*",
     "tripid": "*"
   }
}

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 dans une application consommateur

{
  "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 opération de 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 de tâches par lot sur le 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": {
         "taskids": ["*"]
       }
    }

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

Exemple de jeton pour une application de pilote

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

Exemple de jeton pour suivre toutes les tâches et tous les véhicules

L'exemple suivant est un jeton qui suit toutes les tâches et des véhicules de la flotte. Consultez Configurer la bibliothèque JavaScript Fleet Tracking. pour l'implémentation 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": "*",
       }
    }

Étape suivante