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. quando sua base de código é escrita em Java. Esta biblioteca lida com a emissão de JWTs para todos os casos de uso que você possa precisar com o serviço e muito simplifica 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 apresenta as várias exemplos de JWTs para cada cenário.
Como os JWTs funcionam
Para ambientes não confiáveis, como smartphones e navegadores da Web, o back-end o servidor emite JWTs que funcionam da seguinte maneira:
O código do cliente em execução em um ambiente de baixa confiança chama seu servidor em execução em um ambiente totalmente confiável para solicitar o JWT apropriado para passar para o Fleet Engine.
Os JWTs estão associados a contas de serviço. Por isso, as solicitações enviadas ao Fleet Engine são implicitamente associados à conta de serviço que assinou o JWT.
As declarações do JWT restringem ainda mais os recursos em que o cliente pode operar, como veículos, viagens ou tarefas específicas.
Usar a biblioteca de autorização para Java
Para usar a biblioteca de autorização do Fleet Engine para Java, acesse o repositório do GitHub. A biblioteca simplifica a construção do Fleet Engine JWTs e assiná-los com segurança. Ela oferece o seguinte:
- Declarações de dependência do projeto
- Uma lista completa de todos os papéis da conta de serviço para viagens sob demanda ou tarefas agendadas
- 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 uma biblioteca de cliente do Google API Codegen (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
Se não puder usar a biblioteca de autorização para Java, você deve implementar JWTs no sua própria base de código. Esta seção fornece algumas diretrizes para criar seu próprio tokens. Consulte JSON Web Tokens na seção Segurança no Fleet Engine para ver uma lista de campos e declarações do JWT. Consulte Conta de serviço papéis para os papéis da conta de serviço usados pelo Fleet Engine. Consulte a seção a seguir para uma lista de exemplos de JWT para viagens sob demanda ou tarefas agendadas.
Diretrizes gerais
- Use contas e papéis de serviço apropriados. A conta de serviço e
função associada garante que o usuário que solicita o token esteja autorizado a
visualizar as informações às quais o token concede acesso. Especificamente:
- Se assinar um JWT para ser transmitido 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 pode alterar e acessar dados aos quais não deveria ter acesso.
- Se assinar o JWT que será usado para chamadas privilegiadas, use o serviço conta com o papel de administrador correto do Fleet Engine ao usar o ADC ou JWTs. Caso contrário, a operação 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.
- Se você precisar 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 para autorização de conta de serviço sem OAuth na documentação para desenvolvedores de identidade.
Para viagens sob demanda
- Ao criar o payload do JWT, inclua uma declaração adicional na autorização
Seção com a chave
vehicleid
outripid
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
edeliveryvehicleids
. Afazeres isso, você adiciona outra reivindicação na seção de autorização com o chavestaskid
edeliveryvehicleid
. - Ao usar o asterisco (
*
) na declaraçãotaskids
, ele precisa ser o único elemento na matriz.
- Defina o valor de cada chave como
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 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 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"
}
}
Exemplos de JWT para operações de frota
Esta seção apresenta um exemplo de JWT para um cenário típico em operações de frota.
Token de exemplo para rastrear todas as tarefas e veículos em uma frota
O exemplo a seguir é um token que rastreia todas as tarefas e veículos na frota de um app baseado na Web usado por um operador. As permissões necessárias para essas operações é maior do que para aplicativos clientes. Consulte Configure a biblioteca JavaScript Fleet Tracking para o lado do cliente. implementação que usaria este token:
Assine o token usando o Cloud IAM
Fleet Engine Delivery Fleet Reader
de rede.
{
"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 autenticação alternativo para operações do servidor de back-end
O Google recomenda que você use o ADC para autenticar operações do servidor de back-end. Se não é possível usar o ADC e é necessário usar JWTs. Consulte estes exemplos.
Exemplo de token para uma operação de servidor de back-end sob demanda
{ "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 programada do 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 programada de criação de tarefas em lote do 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 programado 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": "*" } }
A seguir
- Verifique sua configuração para criar um veículo de teste e garantir seus tokens estão funcionando conforme esperado
- Para informações sobre como usar o ADC em vez de JWTs para operações de servidor de back-end, consulte a Visão geral de segurança.