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 Jetonları (JWT'ler) 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
- Fleet Engine'da kimlik doğrulama ve yetkilendirme yapmak için Uygulama Varsayılan Kimlik Bilgileri'ni kullanın.
- JWT'leri imzalamak için uygun bir hizmet hesabı kullanın. Fleet Engine'in Temel Özellikleri bölümünde Fleet Engine hizmet hesabı rollerine bakın.
JSON Web jetonları hakkında daha fazla bilgi için Fleet Engine ile İlgili Temel Bilgiler başlıklı makalenin JSON Web Jetonları bölümüne bakın.
Müşteriler jetonları nasıl alır?
Bir sürücü veya tüketici, uygun yetkilendirme kimlik bilgilerini kullanarak uygulamanıza giriş yaptığında, söz konusu cihazdan gönderilen tüm güncellemeler, uygulamanın izinlerini Fleet Engine'a ileten uygun yetkilendirme jetonlarını kullanmalıdır.
Geliştirici olarak, istemci uygulamanız aşağıdakileri yapma olanağı sağlamalıdır:
- Sunucunuzdan bir JSON Web Token'u alın.
- Jeton yenileme işlemlerini en aza indirmek için jetonu süresi dolana kadar yeniden kullanın.
- Süresi dolan jetonu yenileyin.
AuthTokenFactory
sınıfı, konum güncellenirken yetkilendirme jetonları oluşturur. SDK, jetonları Fleet Engine'a gönderilecek güncelleme bilgileriyle birlikte paketlemelidir. SDK'yı başlatmadan önce sunucu tarafı uygulamanızın jeton yayınlayabileceğinden emin olun.
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
AuthTokenFactory
için iskelet uygulama örneğini aşağıda bulabilirsiniz:
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 yeniden kullanmak için kaydeder ve eski jetonun geçerlilik süresi sona ermeden 10 dakika önce jetonu yeniden getirir.
Uygulamanız, jetonları yenilemek için arka plan iş parçacığı kullanmak gibi işlemleri farklı şekilde yapabilir.
Fleet Engine için kullanılabilen istemci kitaplıkları hakkında bilgi edinmek isterseniz Araç çağırma hizmetleri için istemci kitaplıkları başlıklı makaleyi inceleyin.