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