الحصول على الرموز المميّزة للتفويض

ما هو الرمز المميّز؟

بالنسبة إلى طلبات بيانات واجهة برمجة التطبيقات من البيئات ذات مستوى الثقة المنخفض، تتطلّب أداة Fleet Engine استخدام رموز JSON المميّزة للويب (JWT) التي تم توقيعها من خلال حساب خدمة مناسب. وتشمل البيئات منخفضة الثقة الهواتف الذكية والمتصفحات. يبدأ JWT على خادمك، وهو بيئة موثوق بها بالكامل. يتم توقيع JWT وتشفيره وتمريره إلى العميل لإجراء تفاعلات لاحقة مع الخادم حتى تنتهي صلاحيته أو لا يصبح صالحًا.

يجب أن تتم مصادقة الخلفية وتفويضها ضد Fleet Engine باستخدام آليات بيانات الاعتماد التلقائية للتطبيق العادية. احرص على استخدام ملفّات JWT التي تم توقيعها من خلال حساب خدمة مناسب. للحصول على قائمة بأدوار حساب الخدمة، يُرجى الاطّلاع على أدوار حساب خدمة Fleet Engine في Fleet Engine Basics.

في المقابل، يجب أن تتم المصادقة والتفويض في الخلفية باستخدام بيانات الاعتماد التلقائية للتطبيق العادية وآليات Fleet Engine.

لمزيد من المعلومات حول رموز JSON المميّزة للويب، يُرجى الاطّلاع على رموز JSON المميّزة للويب في Fleet Engine Essentials.

كيف يحصل العملاء على الرموز المميزة؟

بعد أن يسجّل كل من السائق أو المستهلك الدخول إلى تطبيقك باستخدام بيانات اعتماد التفويض المناسبة، يجب أن تستخدم أي تحديثات صادرة من هذا الجهاز رموز تفويض مميّزة مناسبة لإعلام Fleet Engine بأذونات التطبيق.

بصفتك مطوّرًا، يجب أن يتيح لك تنفيذ العميل تنفيذ ما يلي:

  • أحضر رمز JSON المميّز للويب (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، يُرجى الاطّلاع على مكتبات العملاء لخدمات المهام المُجدوَلة.

الخطوات التالية

إعداد حزمة تطوير البرامج (SDK) لبرنامج التشغيل