Yetkilendirme jetonları alma

Jeton nedir?

Güvenilirliği düşük ortamlardan gelen API yöntemi çağrıları için Fleet Engine, uygun bir hizmet hesabı tarafından imzalanan JSON Web Jetonları'nın (JWT'ler) kullanılmasını gerektirir. Akıllı telefonlar ve tarayıcılar, güven düzeyinin düşük olduğu ortamlara dahildir. JWT, tamamen güvenilir bir ortam olan sunucunuzda oluşturulur. JWT imzalanır, şifrelenir ve sonraki sunucu için istemciye iletilir geçerlilik süresi sona erene kadar veya geçerliliğini yitirene kadar işlem gerçekleştiremez. Örneğin, hizmet hesabı rollerinin listesi için Fleet Engine hizmet hesabı rollerine bakın Fleet Engine Basics (Filo Motoru Temel Bilgileri) bölümüne göz atın.

Buna karşılık, arka ucunuzun Fleet Engine'e karşı kimlik doğrulaması ve yetkilendirme yapması gerekir. standart Uygulama Varsayılan Kimlik Bilgilerini kullanarak mekanizmalar.

JSON Web Jetonları hakkında daha fazla bilgi için JSON Web Jetonları'na Fleet Engine ile İlgili Temel Bilgiler.

Müşteriler jetonları nasıl alır?

Bir sürücü veya tüketici, uygun kullanıyorsanız, bu cihazdan yayınlanan tüm güncellemelerin Bu da, Fleet Engine'e bununla ilgili bilgileri, izninin verilmesi gerekir.

Geliştirici olarak, istemci uygulamanız aşağıdakileri yapma imkanı sağlamalıdır. şu:

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

AuthTokenFactory sınıfı, konum güncellemesinde yetkilendirme jetonları oluşturur gerekir. SDK, jetonları güncellemeyle birlikte paketlemelidir bilgi sağlar. Sunucu tarafınızın sağlandığından emin olun uygulanması, SDK'yı başlatmadan önce jeton yayınlayabilir.

Fleet Engine hizmetinin beklediği jetonlarla ilgili ayrıntılar için Fleet Engine'da JSON web jetonu verme başlıklı makaleyi inceleyin.

Yetkilendirme jetonu getirme aracı örneği

Aşağıda AuthTokenFactory iskelet uygulaması verilmiştir:

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 uygulamada, yetkilendirme sunucusundan JSON biçiminde bir jeton almak için yerleşik Java HTTP istemcisi kullanılır. İstemci jetonu kaydeder eski jetonun kullanılmasından sonraki 10 dakika içindeyse jetonu yeniden getirir ve geçerlilik süresi vardır.

Uygulamanız, arka plan ileti dizisi kullanmak gibi bazı işlemleri farklı yapabilir tıklayın.

Fleet Engine'de kullanabileceğiniz istemci kitaplıkları için bkz. İsteğe bağlı gezi hizmetleri için istemci kitaplıkları.

Sırada ne var?

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