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