Emitir tokens JSON Web

Este documento mostra como emitir JSON Web Tokens como parte da ativação do Web e apps para dispositivos móveis aos dados do Fleet Engine. Caso ainda não tenha feito isso, leia JSON Web Tokens na seção Segurança no Fleet Engine nesta seção. Com o serviço Fleet Engine, é possível emitir JWTs em um dos da seguinte maneira:

  • Usar a biblioteca de autorização. O Google recomenda que você use essa abordagem ao sua base de código é escrita em Java. Esta biblioteca lida com a emissão de JWTs para todos casos de uso que você possa precisar com o serviço e simplifica muito sua implementação.
  • Crie seus próprios JWTs. Se não puder usar nossa biblioteca JWT, você precisará construa-os na sua própria base de código. Esta seção fornece vários exemplos de JWTs para cada cenário.

Usar a biblioteca de autorização para Java

Para usar a biblioteca de autorização do Fleet Engine para Java, acesse a página do GitHub repositório. A biblioteca simplifica a construção do Fleet Engine JWTs e assiná-los com segurança. Ela fornece o seguinte:

  • Declarações de dependência do projeto
  • Lista completa de todos os papéis da conta de serviço para viagens sob demanda ou programadas tarefas
  • Mecanismos de assinatura de token que não sejam de arquivos de credenciais, como representar uma conta de serviço
  • Anexa tokens assinados a solicitações de saída feitas de um stub gRPC ou um Cliente GAPIC
  • Instruções sobre como integrar os signatários com as bibliotecas de cliente do Fleet Engine

Se você emitir JWTs a partir do seu código

Quando não for possível usar a biblioteca de autorização para Java, será preciso implementar JWTs. na sua própria base de código. Esta seção fornece algumas diretrizes para criar sua seus próprios tokens. Consulte JSON Web Tokens em Segurança no Fleet Engine para conferir uma lista dos papéis da conta de serviço e dos campos e declarações do JWT. Consulte a seção a seguir para uma lista de exemplos de JWT para viagens sob demanda ou tarefas agendadas.

Diretrizes gerais

  • Use papéis apropriados. Isso garante que o usuário que solicita o token seja autorizados a visualizar as informações às quais o token concede acesso. Especificamente:
    • Ao assinar o JWT que será passado para um dispositivo móvel, use o serviço conta para o papel de Driver ou SDK do consumidor. Caso contrário, o site dispositivo poderá alterar o estado que não deveria ter.
    • Da mesma forma, ao assinar o JWT que será usado para chamadas privilegiadas, certifique-se de usar a conta de serviço com o papel correto de administrador do Fleet Engine. Caso contrário, a operação vai falhar.
  • Compartilhe apenas os tokens criados. Nunca compartilhe as credenciais usadas para criar os tokens.
  • Para chamadas gRPC, o mecanismo para anexar o token depende da linguagem e estrutura usados para fazer a chamada. O mecanismo para especificar token para uma chamada HTTP é incluir um cabeçalho Authorization com um portador token, cujo valor é o token.
  • retornar um prazo de validade. Seu servidor deve retornar um tempo de expiração para o geralmente em segundos.
  • Para criar e assinar um JSON diretamente como um portador de token, em vez de usar Tokens de acesso do OAuth 2.0, leia as instruções da seção Conta de serviço autorização sem OAuth no console do Cloud Identity na documentação do Google Cloud.

Para viagens sob demanda

  • Ao criar o payload do JWT, inclua uma declaração adicional na autorização Seção com a chave vehicleid ou tripid definida como o valor do veículo ID ou ID da viagem para a qual a chamada está sendo feita.

Para tarefas agendadas

  • Quando o servidor chama outras APIs, os tokens também devem conter o alegação apropriada. Para isso, faça o seguinte:
    • Defina o valor de cada chave como *.
    • Conceda ao usuário acesso a todos os taskids e deliveryvehicleids. Afazeres isso, você adiciona outra reivindicação na seção de autorização com o chaves taskid e deliveryvehicleid.
    • Ao usar o asterisco (*) na declaração taskids, ele precisa ser o único elemento na matriz.

Exemplos de JWT para viagens sob demanda

Esta seção fornece exemplos de JWT para cenários comuns se você usar sob demanda viagens.

Exemplo de token para uma operação de servidor de back-end

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

Exemplo de token para uma operação de app do motorista

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

Exemplo de token para uma operação de aplicativo do 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"
   }
}

Exemplos de JWT para tarefas programadas

Esta seção fornece um exemplo de JWT para cenários típicos se você usar modelos tarefas.

Exemplo de token para uma operação de servidor de back-end

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

Exemplo de token para uma operação de criação de tarefas em lote de servidor de back-end

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

Exemplo de token para um servidor de back-end por operação de veí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": "*"
       }
    }

Exemplo de token para um app de motorista

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

Exemplo de token para um aplicativo para o consumidor

    {
      "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 exemplo para rastrear todas as tarefas e veículos

O exemplo a seguir é um token que rastreia todas as tarefas e os veículos da frota. Consulte Configurar a biblioteca JavaScript Fleet Tracking. para a implementação do lado do cliente que usaria esse token:

  • Assine o token usando o papel Fleet Engine Delivery Fleet Reader do 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": "*",
       }
    }

A seguir