Emitir tokens web JSON

En este documento, se explica cómo emitir tokens web JSON como parte de la habilitación del acceso de tus apps web y para dispositivos móviles 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:

  • Usa la biblioteca de autorización: Google recomienda usar este enfoque cuando tu base de código está escrita en Java. Esta biblioteca controla la emisión de JWT para a todas las situaciones de casos de uso que puedas necesitar con el servicio simplifica tu implementación.
  • 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 funcionan los JWT

Para entornos no confiables, como teléfonos celulares y navegadores web, tu backend el servidor emite JWT que funcionan de la siguiente manera:

  • El código de cliente que se ejecuta en un entorno de confianza baja llama a tu servidor código que se ejecuta en un entorno completamente confiable para solicitar el token JWT adecuado pasar a Fleet Engine.

  • Los JWT están asociados con las cuentas de servicio, por lo que las solicitudes enviadas a Fleet Engine están asociadas implícitamente con la cuenta de servicio que firmó el JWT.

  • Los reclamos de JWT restringen aún más los recursos en los que el cliente puede operar, como vehículos, viajes o tareas específicos.

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
  • Una lista completa de todos los roles de cuenta de servicio para viajes a pedido o tareas programadas
  • Mecanismos de firma de tokens distintos al uso de archivos de credenciales, como identidad de una cuenta de servicio
  • Adjunta tokens firmados a solicitudes salientes realizadas desde un stub de gRPC o una biblioteca cliente de Google API Codegen (GAPIC)
  • Instrucciones para integrar a los firmantes en las bibliotecas cliente de Fleet Engine

Si emites JWT desde tu código

Si 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 ofrecen algunos lineamientos para crear tokens. Consulta Tokens web JSON en la sección Seguridad en Fleet Engine. para obtener una lista de campos y reclamaciones de JWT. Consulta Cuenta de servicio roles para los roles de la cuenta de servicio que usa Fleet Engine. 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 cuentas de servicio y roles adecuados. La cuenta de servicio y el rol asociado garantizan que el usuario que solicita el token esté autorizado para ver la información a la que el token le otorga acceso. En particular, haz lo siguiente:
    • Si firmas un JWT para pasar a un dispositivo móvil, usa el servicio cuenta para el rol de controlador o SDK de consumidor. De lo contrario, el dispositivo móvil puede alterar y acceder a datos a los que no debería tener acceso.
    • Si firmas el JWT que se usará para llamadas con privilegios, usa el con el rol de Administrador de Fleet Engine correcto cuando se usan ADC o JWT. De lo contrario, la operación fallará.
  • Solo comparte los tokens creados. Nunca compartas las credenciales que se usaron para crear los tokens.
  • En el caso de las llamadas a gRPC, el mecanismo para adjuntar el token depende del lenguaje y el framework que se usen 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.
  • Si necesitas crear y firmar un JSON directamente como portador del token, en lugar en lugar de usar tokens de acceso de OAuth 2.0, lee las instrucciones para Service autorización de la cuenta sin OAuth en la sección Documentación para desarrolladores

Para viajes on demand

  • Cuando crees la carga útil de JWT, agrega un reclamo adicional en la sección de autorización con la clave vehicleid o tripid establecida en el valor del ID del vehículo o del 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 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 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"
   }
}

Ejemplo de token para una operación de app de consumidor

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

Ejemplos de JWT para operaciones de flota

En esta sección, se proporciona un ejemplo de JWT para las operaciones de flotas.

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

El siguiente ejemplo es un token que rastrea todas las tareas y los vehículos de la flota desde una app basada en la Web usada por un operador. Los permisos necesarios en estas operaciones es mayor que en las aplicaciones cliente. Consulta Configura la biblioteca de seguimiento de flotas de JavaScript para la implementación del cliente que usaría este token:

  • Firma el token con Fleet Engine Delivery Fleet Reader de Cloud IAM en el área de la seguridad en la nube.

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

Método de autenticación alternativo para operaciones de servidor de backend

Google recomienda que uses ADC para autenticar las operaciones del servidor de backend. Si no puedes usar ADC y necesitas JWT. Consulta estos ejemplos.

Token de ejemplo para una operación de servidor de backend a pedido

  {
    "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 programada 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 programada de creación de tareas por lotes del 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": ["*"]
       }
    }
  

Ejemplo de token para una operación de servidor de backend programada por 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": "*"
       }
    }
  

¿Qué sigue?