Mendapatkan token otorisasi

Apa itu token?

Fleet Engine memerlukan penggunaan Token Web JSON (JWT) yang ditandatangani oleh akun layanan yang sesuai untuk panggilan metode API dari low-trust lingkungan fleksibel. Lingkungan kepercayaan rendah mencakup smartphone dan browser. JWT berasal dari server Anda, yang merupakan lingkungan yang sepenuhnya tepercaya. JWT ditandatangani, dienkripsi, dan diteruskan ke klien untuk selanjutnya interaksi hingga kedaluwarsa atau tidak lagi valid.

Backend Anda harus melakukan autentikasi dan otorisasi terhadap Fleet Engine menggunakan mekanisme Kredensial Default Aplikasi standar. Merek pastikan untuk menggunakan JWT yang telah ditandatangani oleh akun layanan yang sesuai. Untuk daftar peran akun layanan, lihat peran akun layanan Fleet Engine di Dasar-Dasar Armada Engine.

Untuk informasi selengkapnya tentang Token Web JSON, lihat Token Web JSON di Dasar-Dasar Mesin Perlengkapan.

Bagaimana cara klien mendapatkan token?

Setelah pengemudi atau konsumen login ke aplikasi Anda menggunakan kredensial otorisasi, setiap pembaruan yang dikeluarkan dari perangkat itu harus menggunakan token otorisasi yang sesuai, yang mengomunikasikan ke Fleet Engine izin akses untuk aplikasi.

Sebagai pengembang, penerapan klien Anda harus memberikan kemampuan untuk melakukan hal berikut:

  • Ambil Token Web JSON dari server Anda.
  • Gunakan kembali token hingga habis masa berlakunya untuk meminimalkan refresh token.
  • Muat ulang token jika masa berlakunya sudah habis.

Class AuthTokenFactory membuat token otorisasi saat pembaruan lokasi baik. SDK harus memaketkan token dengan update untuk dikirim ke Fleet Engine. Pastikan sisi server Anda dapat mengeluarkan token sebelum menginisialisasi SDK.

Untuk detail tentang token yang diharapkan oleh layanan Fleet Engine, lihat Menerbitkan JSON Token Web untuk Fleet Engine.

Contoh pengambil token otorisasi

Berikut adalah implementasi kerangka 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);
    }
  }
}

Implementasi khusus ini menggunakan klien HTTP Java bawaan untuk mengambil token dalam format JSON dari server otorisasi. Klien menyimpan token untuk digunakan kembali dan mengambil kembali token jika token lama berada dalam waktu 10 menit sejak token waktu habis masa berlaku.

Implementasi Anda mungkin melakukan hal-hal yang berbeda, seperti menggunakan thread latar belakang untuk memperbarui token.

Untuk library klien yang tersedia bagi Fleet Engine, lihat Library klien untuk layanan perjalanan on demand.

Langkah berikutnya

Melakukan inisialisasi Driver SDK