Yetkilendirme jetonları alma

Tüketici SDK'sı, JSON Web Jetonları kullanarak yetkilendirme sağlar. JSON Web Jetonu (JWT), bir hizmet üzerinde bir veya daha fazla hak talebi sağlayan bir yetkilendirme jetonudur.

Tüketici SDK'sı, şu işlemler için uygulama tarafından sağlanan JSON Web Jetonu'nu kullanır: Fleet Engine ile iletişim kurmak için idealdir. Fleet Engine sunucusu için JSON Web Jetonları bölümüne bakın ve JSON Web jetonları yayınlama başlıklı makaleleri inceleyin.

Yetkilendirme jetonu aşağıdaki Fleet Engine hizmetlerine erişim sağlar:

  • TripService: Tüketici SDK'sının seyahat ayrıntılarına erişmesine izin verir. Örneğin: araç konumu, rota ve TVS. Yolculuk hizmeti için yetkilendirme jetonları jetonun authorization başlığında tripid:TRIP_ID hak talebi içermelidir. Burada TRIP_ID, paylaşılan isteğe bağlı seyahatin seyahat kimliğidir.

  • VehicleService - Tüketici SDK'sına ve araç yoğunluğu katmanını görüntülemek için yaklaşık araç konumunu ve tahmini teslim süresi belirlenebilir. Tüketici SDK'sı yalnızca yaklaşık konumlarından birini kullanıyorsanız, araç hizmeti için yetkilendirme jetonları vehicleid hak talebi.

Jeton nedir?

Fleet Engine, JSON Web Jetonlarının (JWT) düşük güventan gelen API yöntemi çağrıları için uygun hizmet hesabı ortamlar için geçerlidir. Akıllı telefonlar ve tarayıcılar, güven düzeyinin düşük olduğu ortamlara dahildir. JWT tamamen güvenilir bir ortam olan sunucunuzdan kaynaklandığı için JWT imzalanır, şifrelenir ve sonraki sunucu için istemciye iletilir geçerlilik süresi sona erene kadar veya geçerliliğini yitirene kadar etkileşimleri iptal eder.

Arka ucunuz aşağıdakileri kullanarak Fleet Engine'e karşı kimlik doğrulamalı ve yetkilendirme yapmalıdır: Application Default Credentials (Uygulama Varsayılan Kimlik Bilgileri) mekanizmalarını kullanın. Marka uygun bir hizmet hesabı tarafından imzalanmış JWT'leri kullandığınızdan emin olun. Ö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.

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 otomatikleştirmesini sağlayan; Fleet Engine'e izninin verilmesi gerekir.

Geliştirici olarak, istemci uygulamanızda şunları yapabilirsiniz: ş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 hizmeti tarafından beklenen jetonlarla ilgili ayrıntılar için Issue JSON Fleet Engine için Web Jetonları'nı tıklayın.

Yetkilendirme jetonu alıcı örneği

Aşağıdaki kod örneğinde, yetkilendirme jetonunun nasıl uygulanacağı gösterilmektedir geri arama.

Java

class JsonAuthTokenFactory implements AuthTokenFactory {

  private static final String TOKEN_URL =
      "https://yourauthserver.example/token";

  private static class CachedToken {
    String tokenValue;
    long expiryTimeMs;
    String tripId;
  }

  private CachedToken token;

  /*

*   This method is called on a background thread. Blocking is OK. However, be
*   aware that no information can be obtained from Fleet Engine until this
*   method returns.
*/
@Override
public String getToken(AuthTokenContext context) {
  // If there is no existing token or token has expired, go get a new one.
  String tripId = context.getTripId();
  if (tripId == null) {
    throw new RuntimeException("Trip ID is missing from AuthTokenContext");
  }
  if (token == null || System.currentTimeMillis() > token.expiryTimeMs ||
      !tripId.equals(token.tripId)) {
    token = fetchNewToken(tripId);
  }
  return token.tokenValue;
}

  private static CachedToken fetchNewToken(String tripId) {
    String url = TOKEN_URL + "/" + tripId;
    CachedToken token = new CachedToken();

    try (Reader r = new InputStreamReader(new URL(url).openStream())) {
      com.google.gson.JsonObject obj
          = com.google.gson.JsonParser.parseReader(r).getAsJsonObject();

      token.tokenValue = obj.get("ServiceToken").getAsString();
      token.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 5 minutes from that time.
    */
    token.expiryTimeMs -= 5 * 60 * 1000;
  } catch (IOException e) {
    /*
    *   It's OK to throw exceptions here. The error listeners will receive the
    *   error thrown here.
    */
    throw new RuntimeException("Could not get auth token", e);
  }
  token.tripId = tripId;

    return token;
  }
}

Kotlin

class JsonAuthTokenFactory : AuthTokenFactory() {

  private var token: CachedToken? = null

  /*

*   This method is called on a background thread. Blocking is OK. However, be
*   aware that no information can be obtained from Fleet Engine until this
*   method returns.
*/
override fun getToken(context: AuthTokenContext): String {
  // If there is no existing token or token has expired, go get a new one.
  val tripId =
    context.getTripId() ?:
      throw RuntimeException("Trip ID is missing from AuthTokenContext")

    if (token == null || System.currentTimeMillis() > token.expiryTimeMs ||
        tripId != token.tripId) {
      token = fetchNewToken(tripId)
    }

    return token.tokenValue
  }

  class CachedToken(
    var tokenValue: String? = "",
    var expiryTimeMs: Long = 0,
    var tripId: String? = "",
  )

  private companion object {
    const val TOKEN_URL = "https://yourauthserver.example/token"

    fun fetchNewToken(tripId: String) {
      val url = "$TOKEN_URL/$tripId"
      val token = CachedToken()

      try {
        val reader = InputStreamReader(URL(url).openStream())

        reader.use {
          val obj = com.google.gson.JsonParser.parseReader(r).getAsJsonObject()

          token.tokenValue = obj.get("ServiceToken").getAsString()
          token.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 5 minutes from that time.
        */
        token.expiryTimeMs -= 5 * 60 * 1000
      }
    } catch (e: IOException) {
      /*
            *   It's OK to throw exceptions here. The error listeners will receive the
            *   error thrown here.
      */
      throw RuntimeException("Could not get auth token", e)
    }

      token.tripId = tripId

      return token
    }
  }
}

Sırada ne var?

Tüketici SDK'sını başlatma