Receber tokens de autorização

O que é um token?

O Fleet Engine exige o uso de JSON Web Tokens (JWTs) assinados por uma a conta de serviço apropriada para chamadas de método de API de objetos de baixa confiança ambientes. Ambientes de baixa confiança incluem smartphones e navegadores. Um JWT tem origem no seu servidor, que é um ambiente totalmente confiável. O JWT é assinado, criptografado e passado ao cliente para o próximo servidor interações até que expirem ou não sejam mais válidas.

Seu back-end deve autenticar e autorizar o Fleet Engine usando mecanismos padrão do Application Default Credentials. Marca use JWTs assinados por uma conta de serviço apropriada. Para um lista de papéis da conta de serviço, consulte os papéis da conta de serviço do Fleet Engine. em Noções básicas do mecanismo de frota.

Para saber mais sobre JSON Web Tokens, consulte JSON Web Tokens em Fundamentos do motor de frota.

Como os clientes recebem tokens?

Depois que um motorista ou consumidor faz login no aplicativo usando a credenciais de autorização, as atualizações emitidas por esse dispositivo devem usar tokens de autorização apropriados, que comunicam ao Fleet Engine o do app.

Como desenvolvedor, a implementação de seu cliente deve fornecer a capacidade de fazer o seguinte:

  • Busque um JSON Web Token no servidor.
  • Reutilize o token até que ele expire para minimizar as atualizações.
  • Atualizar o token quando ele expirar.

A classe AuthTokenFactory gera tokens de autorização na atualização do local. tempo de resposta. O SDK precisa empacotar os tokens com a atualização informações para enviar ao Fleet Engine. Confirme se o servidor implementação pode emitir tokens antes de inicializar o SDK.

Para detalhes sobre os tokens esperados pelo serviço Fleet Engine, consulte Emitir JSON Tokens da Web para o Fleet Engine.

Exemplo de um coletor de tokens de autorização

Confira o esqueleto de implementação de um AuthTokenFactory:

class JsonAuthTokenFactory implements AuthTokenFactory {
  private String vehicleServiceToken;  // initially null
  private long expiryTimeMs = 0;
  private String vehicleId;

  // This method is called on a thread whose only responsibility is to send
  // location updates. Blocking is OK, but just know that no location updates
  // can occur until this method returns.
  @Override
  public String getToken(AuthTokenContext authTokenContext) {
    String vehicleId = requireNonNull(context.getVehicleId());

    if (System.currentTimeMillis() > expiryTimeMs || !vehicleId.equals(this.vehicleId)) {
      // The token has expired, go get a new one.
      fetchNewToken(vehicleId);
    }

    return vehicleServiceToken;
  }

  private void fetchNewToken(String vehicleId) {
    String url = "https://yourauthserver.example/token/" + vehicleId;

    try (Reader r = new InputStreamReader(new URL(url).openStream())) {
      com.google.gson.JsonObject obj
          = com.google.gson.JsonParser.parseReader(r).getAsJsonObject();
      vehicleServiceToken = obj.get("VehicleServiceToken").getAsString();
      expiryTimeMs = obj.get("TokenExpiryMs").getAsLong();

      // The expiry time could be an hour from now, but just to try and avoid
      // passing expired tokens, we subtract 10 minutes from that time.
      expiryTimeMs -= 10 * 60 * 1000;
      this.vehicleId = vehicleId;
    } catch (IOException e) {
      // It's OK to throw exceptions here. The StatusListener you passed to
      // create the DriverContext class will be notified and passed along the failed
      // update warning.
      throw new RuntimeException("Could not get auth token", e);
    }
  }
}

Esta implementação específica usa o cliente HTTP Java integrado para buscar uma token em formato JSON do servidor de autorização. O cliente salva o token para reutilização e busca novamente o token se o token antigo estiver a menos de 10 minutos de sua ou tempo de validade.

Sua implementação pode fazer coisas de forma diferente, como usar uma linha de execução em segundo plano para atualizar tokens.

Para conhecer as bibliotecas de cliente disponíveis para o Fleet Engine, consulte Bibliotecas de cliente para serviços de viagens sob demanda.

A seguir

Inicializar o SDK do Driver