ما هي الرموز المميزة؟
تتطلّب Fleet Engine استخدام رموز JSON المميّزة للويب (JWT) لإجراء عمليات استدعاء طرق واجهة برمجة التطبيقات من البيئات ذات مستوى الثقة المنخفض، مثل الهواتف الذكية والمتصفحات.
يتم إنشاء رمز JWT على الخادم الخاص بك، ويتم توقيعه وتشفيره وتمريره إلى العميل للتفاعلات اللاحقة مع الخادم إلى أن تنتهي صلاحيته أو يصبح غير صالح.
التفاصيل الأساسية
- استخدِم بيانات الاعتماد التلقائية للتطبيق للمصادقة والتفويض في Fleet Engine.
- استخدِم حساب خدمة مناسبًا لتوقيع رموز JWT. اطّلِع على أدوار حساب خدمة Fleet Engine في أساسيات Fleet Engine.
لمزيد من المعلومات حول رموز JSON المميّزة للويب، راجِع رموز JSON المميّزة للويب في أساسيات Fleet Engine.
كيف يحصل العملاء على الرموز المميزة؟
بعد أن يسجّل السائق أو المستهلك الدخول إلى تطبيقك باستخدام بيانات اعتماد التفويض المناسبة، يجب أن تستخدم أي تحديثات صادرة من هذا الجهاز رموز تفويض مناسبة، ما يوضّح لخدمة Fleet Engine أذونات التطبيق.
بصفتك المطوّر، يجب أن يوفّر تنفيذ العميل إمكانية إجراء ما يلي:
- استرجِع رمز JSON المميّز للويب من الخادم.
- أعِد استخدام الرمز المميز إلى أن تنتهي صلاحيته لتقليل عمليات إعادة تحميل الرموز المميزة.
- أعِد تحميل الرمز المميز عند انتهاء صلاحيته.
تنشئ الفئة 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);
}
}
}
يستخدم هذا التنفيذ تحديدًا برنامج Java HTTP المدمج لجلب رمز مميّز بتنسيق JSON من خادم التفويض. يحفظ العميل الرمز المميز لإعادة استخدامه، ويعيد جلبه إذا كان الرمز المميز القديم على وشك الانتهاء خلال 10 دقائق.
قد يختلف التنفيذ، مثلاً باستخدام سلسلة محادثات في الخلفية لتحديث الرموز المميزة.
للاطّلاع على مكتبات البرامج المتوفرة لخدمة Fleet Engine، يُرجى الرجوع إلى مكتبات البرامج لخدمات المهام المجدوَلة.