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

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

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

ينشأ رمز JWT على الخادم الخاص بك، ويتم توقيعه وتشفيره وتمريره إلى العميل للتفاعلات اللاحقة مع الخادم إلى أن تنتهي صلاحيته أو يصبح غير صالح.

التفاصيل الأساسية

لمزيد من المعلومات حول رموز 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) الخاصة بالسائق