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