Emitir tokens web JSON

En este documento, se explica cómo emitir tokens web JSON como parte de la habilitación de tu y las aplicaciones para dispositivos móviles acceden a los datos de Fleet Engine. Si aún no lo has hecho lee los Tokens web JSON en la sección Seguridad en Fleet Engine sección. Con el servicio de Fleet Engine, puedes emitir JWT en una de las de la siguiente manera:

  • Usar la biblioteca de autorización: Google recomienda usar este enfoque cuando que tu base de código esté escrita en Java. Esta biblioteca controla la emisión de JWT para todos de casos de uso que podrías necesitar con el servicio y simplifica en gran medida la para implementarlos.
  • Crear tus propios JWT: si no puedes usar nuestra biblioteca de JWT, deberás compilarlas en tu propia base de código. En esta sección, se proporcionan los diversos ejemplos de JWT para cada situación.

Cómo usar la biblioteca de autorización para Java

Si deseas usar la biblioteca de autorización de Fleet Engine para Java, visita la página de GitHub Cloud Storage. La biblioteca simplifica la construcción de Fleet Engine los JWT y firmarlos de forma segura. Proporciona lo siguiente:

  • Declaraciones de dependencia del proyecto
  • Lista completa de todos los roles de cuentas de servicio para viajes a pedido o programados tareas
  • Mecanismos de firma de tokens distintos al uso de archivos de credenciales, como identidad de una cuenta de servicio
  • Adjunta tokens firmados a las solicitudes salientes realizadas desde un stub de gRPC o un Cliente de GAPIC
  • Instrucciones para integrar a los firmantes en las bibliotecas cliente de Fleet Engine

Si emites JWT desde tu código

Cuando no puedes usar la biblioteca de autorización para Java, debes implementar los JWT. en tu propia base de código. En esta sección, se brindan algunos lineamientos para crear tu tokens propios. Consulta Tokens web JSON en Seguridad en Fleet Engine. para obtener una lista de los roles de la cuenta de servicio, así como los campos y reclamos de JWT. Consulta en la siguiente sección para obtener una lista de ejemplos de JWT para viajes a pedido o las tareas programadas.

Lineamientos generales

  • Usa los roles adecuados. Esto garantiza que el usuario que solicita el token pueden ver la información a la que el token les otorga acceso. En particular, haz lo siguiente:
    • Cuando firmes el JWT que se pasará a un dispositivo móvil, usa el servicio cuenta para el rol de controlador o SDK de consumidor. De lo contrario, el vínculo el dispositivo podrá modificar el estado que no debería tener.
    • Del mismo modo, cuando firmes el JWT que se usará para llamadas con privilegios, realiza asegúrate de Usar la cuenta de servicio con el rol de administrador de Fleet Engine correcto De lo contrario, la operación fallará.
  • Solo comparte los tokens creados. Nunca compartas las credenciales que se usan crea los tokens.
  • Para las llamadas de gRPC, el mecanismo para adjuntar el token depende del y el framework que se usaron para realizar la llamada. El mecanismo para especificar un token para una llamada HTTP es incluir un encabezado Authorization con un portador token cuyo valor sea el token.
  • Devuelve una hora de vencimiento. Tu servidor debe mostrar una hora de vencimiento para el token, generalmente en segundos.
  • Crear y firmar un JSON directamente como un portador del token, en lugar de usar tokens de acceso de OAuth 2.0; lee las instrucciones para la cuenta de servicio autorización sin OAuth en Identity Developer en la documentación de Google Cloud.

Para viajes on demand

  • Cuando crees la carga útil de JWT, agrega una reclamación adicional en la autorización con la clave vehicleid o tripid establecida en el valor del vehículo Es el ID de viaje o el ID de viaje para el que se realiza la llamada.

Para tareas programadas

  • Cuando tu servidor llama a otras APIs, los tokens también deben contener el el reclamo correspondiente. Para ello, puedes hacer lo siguiente:
    • Establece el valor de cada clave en *.
    • Otorga al usuario acceso a todos los taskids y deliveryvehicleids. Tareas pendientes agregarás una reclamación adicional en la sección de autorización con el las teclas taskid y deliveryvehicleid.
    • Cuando uses el asterisco (*) en la reclamación taskids, debe ser el el único elemento del array.

Ejemplos de JWT para viajes a pedido

Esta sección proporciona ejemplos de JWT para situaciones comunes si usas un modelo viajes.

Token de ejemplo para una operación de servidor de 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": "*"
   }
}

Token de ejemplo para una operación de app del controlador

{
  "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 de ejemplo para una operación de app para consumidores

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

Ejemplos de JWT para tareas programadas

Esta sección ofrece un ejemplo de JWT en situaciones típicas si usas un tareas.

Token de ejemplo para una operación de servidor de 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 de ejemplo para una operación de creación de tareas por lotes de servidor de 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": ["*"]
       }
    }

Token de ejemplo para un servidor de backend por operación de vehículo de entrega

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

Token de ejemplo para una app de controlador

    {
      "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 de ejemplo para una app para consumidores

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

Token de ejemplo para hacer un seguimiento de todas las tareas y vehículos

El siguiente ejemplo es un token que rastrea todas las tareas y vehículos de la flota. Consulta Configura la biblioteca de seguimiento de la flota de JavaScript. para la implementación del cliente que usaría este token:

  • Firma el token con la función Fleet Engine Delivery Fleet Reader de Cloud IAM.

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

¿Qué sigue?