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