Yetkilendirme jetonları alma

Jeton nedir?

Fleet Engine, güven düzeyi düşük ortamlardan (akıllı telefonlar ve tarayıcılar) API yöntemi çağrıları için JSON Web Token (JWT) kullanılmasını gerektirir.

JWT, sunucunuzda oluşturulur, imzalanır, şifrelenir ve süresi dolana veya geçerliliğini yitirene kadar sonraki sunucu etkileşimleri için istemciye iletilir.

Önemli ayrıntılar

JSON Web Jetonları hakkında daha fazla bilgi için Fleet Engine ile İlgili Temel Bilgiler'deki JSON Web Jetonları bölümüne bakın.

İstemciler jetonları nasıl alır?

Sürücü veya tüketici, uygun yetkilendirme kimlik bilgilerini kullanarak uygulamanıza giriş yaptıktan sonra, bu cihazdan gönderilen tüm güncellemeler uygun yetkilendirme jetonlarını kullanmalıdır. Bu jetonlar, uygulamanın izinlerini Fleet Engine'e iletir.

Geliştirici olarak, istemci uygulamanız aşağıdaki işlemleri yapabilmelidir:

  • Sunucunuzdan bir JSON Web Jetonu alın.
  • Jeton yenileme işlemlerini en aza indirmek için jetonu süresi dolana kadar tekrar kullanın.
  • Süresi dolduğunda jetonu yenileyin.

AuthTokenFactory sınıfı, konum güncelleme zamanında yetkilendirme jetonları oluşturur. SDK, Fleet Engine'e gönderilecek güncelleme bilgileriyle birlikte jetonları paketlemelidir. SDK'yı başlatmadan önce sunucu tarafı uygulamanızın jeton yayınlayabildiğinden emin olun.

Fleet Engine hizmetinin beklediği jetonlarla ilgili ayrıntılar için Fleet Engine için JSON Web Jetonları Verme başlıklı makaleyi inceleyin.

Yetkilendirme jetonu getirme aracı örneği

AuthTokenFactory için iskelet uygulama örneği:

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);
    }
  }
}

Bu özel uygulama, yetkilendirme sunucusundan JSON biçiminde bir jeton almak için yerleşik Java HTTP istemcisini kullanır. İstemci, jetonu yeniden kullanmak üzere kaydeder ve eski jetonun süresinin dolmasına 10 dakika kalmışsa jetonu yeniden getirir.

Uygulamanız, yenileme jetonlarını yenilemek için arka plan iş parçacığı kullanmak gibi farklı işlemler yapabilir.

Fleet Engine için kullanılabilen istemci kitaplıklarını Planlanmış görev hizmetleri için istemci kitaplıkları bölümünde bulabilirsiniz.

Sırada ne var?

Sürücü SDK'sını başlatma