En este documento, se explica cómo emitir tokens web JSON como parte de la habilitación del acceso de tus apps basadas en la Web y dispositivos móviles a los datos de Fleet Engine. Si aún no lo hiciste, lee Tokens web JSON en la sección Seguridad en Fleet Engine. Con el servicio de Fleet Engine, puedes emitir JWT de una de las siguientes maneras:
- Usa la biblioteca de autorización: Google recomienda usar este enfoque cuando tu base de código esté escrito en Java. Esta biblioteca controla la emisión de JWT para todos los casos de uso que puedas necesitar con el servicio y simplifica en gran medida tu implementación.
- Crea tus propios JWT: Si no puedes usar nuestra biblioteca de JWT, deberás integrarlos en tu propia base de código. En esta sección, se proporcionan varios ejemplos de JWT para cada situación.
Cómo funcionan los JWT
Para entornos no confiables, como teléfonos celulares y navegadores web, tu servidor de backend emite JWT que funcionan de la siguiente manera:
El código del cliente que se ejecuta en un entorno de baja confianza llama al código del servidor que se ejecuta en un entorno completamente confiable para solicitar el JWT adecuado para pasar a Fleet Engine.
Los JWT están asociados con cuentas de servicio, por lo que las solicitudes enviadas a Fleet Engine están asociadas de forma implícita con la cuenta de servicio que firmó el JWT.
Las reclamaciones de JWT restringen aún más los recursos en los que el cliente puede operar, como vehículos, viajes o tareas específicos.
Usa la biblioteca de autorización para Java
Para usar la biblioteca de autorización de Fleet Engine para Java, visita el repositorio de GitHub. La biblioteca simplifica la construcción de JWT de Fleet Engine y los firma de forma segura. Proporciona lo siguiente:
- Declaraciones de dependencias del proyecto
- Una lista completa de todas las funciones de la cuenta de servicio para viajes a pedido o tareas programadas
- Mecanismos de firma de tokens que no usan archivos de credenciales, como la suplantación 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 los firmantes con 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 JWT en tu propia base de código. En esta sección, se proporcionan algunos lineamientos para crear tus propios tokens. Consulta Tokens web JSON en la sección Seguridad en Fleet Engine para obtener una lista de los campos y las reclamaciones de JWT. Consulta Funciones de la cuenta de servicio para conocer las funciones de la cuenta de servicio que usa Fleet Engine. Consulta la siguiente sección para obtener una lista de ejemplos de JWT para viajes a pedido o tareas programadas.
Lineamientos generales
- Usa las cuentas de servicio y las funciones adecuadas. La cuenta de servicio y la función asociada 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 pasarlo a un dispositivo móvil, usa la cuenta de servicio para la función del SDK de Driver o Consumer. 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 la cuenta de servicio con la función correcta de administrador de Fleet Engine cuando uses ADC o JWT. De lo contrario, la operación fallará.
- Solo comparte los tokens creados. Nunca compartas las credenciales que se usan para crear los tokens.
- Para 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
Authorizationcon un token del portador cuyo valor sea el token. - Devuelve un tiempo de vencimiento. Tu servidor debe mostrar un tiempo de vencimiento para el token, por lo general, en segundos.
- Si necesitas crear y firmar un JSON directamente como un portador de tokens, en lugar de usar tokens de acceso de OAuth 2.0, lee las instrucciones para la autorización de la cuenta de servicio sin OAuth en la documentación para desarrolladores de Identity.
Para viajes a pedido
- Cuando crees la carga útil de JWT, agrega una reclamación adicional en la sección de autorización con la clave
vehicleidotripidestablecida 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 la reclamación adecuada. Para ello, puedes hacer lo siguiente:
- Establece el valor de cada clave en
*. - Otorga al usuario acceso a todos los
taskidsydeliveryvehicleids. Para ello, agrega una reclamación adicional en la sección de autorización con las clavestaskidydeliveryvehicleid. - Cuando se usa el asterisco (
*) en la reclamacióntaskids, debe ser el único elemento del array.
- Establece el valor de cada clave en
Ejemplos de JWT para viajes a pedido
En esta sección, se proporcionan ejemplos de JWT para situaciones comunes si usas viajes a pedido.
Token de ejemplo para una operación de la app para conductores
{
"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 la aplicación 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
En esta sección, se proporciona un ejemplo de JWT para situaciones típicas si usas tareas programadas.
Token de ejemplo para una app para conductores
{
"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 aplicación 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 una situación típica en las operaciones de flota.
Token de ejemplo para hacer un seguimiento de todas las tareas y los vehículos de una flota
En el siguiente ejemplo, se muestra un token que hace un seguimiento de todas las tareas y los vehículos de la flota desde una app basada en la Web que usa un operador. Los permisos necesarios para estas operaciones son mayores que para las aplicaciones cliente. Consulta Configura la biblioteca de seguimiento de flota de JavaScript para la implementación del cliente que usaría este token:
Firma el token con el rol de 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": "*",
}
}
Método de autenticación alternativo para operaciones del servidor de backend
Google recomienda usar ADC para autenticar las operaciones del servidor de backend. Si no puedes usar ADC y necesitas usar JWT, consulta estos ejemplos.
Token de ejemplo para una operación del 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 del servidor de backend programada
{ "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 por lotes de tareas del servidor de backend programada
{ "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 una operación del 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?
- Verifica tu configuración para que puedas crear un vehículo de prueba y asegurarte de que tus tokens funcionen según lo previsto
- Si deseas obtener información para usar ADC en lugar de JWT para las operaciones del servidor de backend, consulta la descripción general de seguridad.