توکن چیست؟
Fleet Engine به استفاده از JSON Web Tokens (JWT) نیاز دارد که توسط یک حساب سرویس مناسب برای فراخوانیهای روش API از محیطهای کماعتماد امضا شده است. محیط های کم اعتماد شامل گوشی های هوشمند و مرورگرها هستند. یک JWT در سرور شما ایجاد می شود که یک محیط کاملاً قابل اعتماد است. JWT امضا می شود، رمزگذاری می شود و برای تعاملات بعدی سرور به مشتری ارسال می شود تا زمانی که منقضی شود یا دیگر معتبر نباشد.
باطن شما باید با استفاده از مکانیزم های استاندارد Application Default Credentials احراز هویت و مجوز در برابر Fleet Engine را صادر کند. مطمئن شوید که از JWT هایی استفاده می کنید که توسط یک حساب سرویس مناسب امضا شده اند. برای فهرستی از نقشهای حساب سرویس، نقشهای حساب خدمات Fleet Engine را در Fleet Engine Basics ببینید.
برای اطلاعات بیشتر درباره JSON Web Tokens، JSON Web Tokens را در Fleet Engine Essentials ببینید.
مشتریان چگونه توکن دریافت می کنند؟
هنگامی که یک راننده یا مصرف کننده با استفاده از اعتبارنامه های مجوز مناسب به برنامه شما وارد می شود، هر به روز رسانی صادر شده از آن دستگاه باید از نشانه های مجوز مناسب استفاده کند که مجوزهای برنامه را به Fleet Engine ارسال می کند.
به عنوان توسعهدهنده، پیادهسازی مشتری شما باید توانایی انجام موارد زیر را ارائه دهد:
- یک نشانه وب JSON از سرور خود دریافت کنید.
- برای به حداقل رساندن بازخوانی توکن، از توکن تا زمان منقضی شدن آن استفاده مجدد کنید.
- زمانی که توکن منقضی شد، آن را رفرش کنید.
کلاس AuthTokenFactory
توکن های مجوز را در زمان به روز رسانی مکان تولید می کند. SDK باید توکن ها را با اطلاعات به روز رسانی بسته بندی کند تا به Fleet Engine ارسال شود. مطمئن شوید که اجرای سمت سرور شما میتواند نشانهها را قبل از شروع اولیه SDK صادر کند.
برای جزئیات بیشتر توکنهای مورد انتظار توسط سرویس Fleet Engine، به شماره JSON Web Tokens for Fleet Engine مراجعه کنید.
نمونه ای از واکشی نشانه مجوز
در اینجا یک پیاده سازی اسکلت یک 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);
}
}
}
این پیاده سازی خاص از سرویس گیرنده جاوا HTTP داخلی برای واکشی توکن با فرمت JSON از سرور مجوز استفاده می کند. کلاینت توکن را برای استفاده مجدد ذخیره می کند و اگر توکن قدیمی در 10 دقیقه از زمان انقضا باشد، توکن را دوباره واکشی می کند.
پیاده سازی شما ممکن است کارها را متفاوت انجام دهد، مانند استفاده از یک رشته پس زمینه برای به روز کردن نشانه ها.
برای کتابخانه های مشتری موجود برای Fleet Engine، به کتابخانه های سرویس گیرنده برای خدمات وظایف برنامه ریزی شده مراجعه کنید.