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

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

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

يجب أن تتم المصادقة والتفويض ضد Fleet Engine باستخدام الواجهة الخلفية. إلى آليات بيانات الاعتماد التلقائية للتطبيق القياسية. احرص على استخدام ملفّات JWT التي تم توقيعها من خلال حساب خدمة مناسب. للاطّلاع على قائمة بأدوار حسابات الخدمة، اطّلِع على أدوار حساب خدمة Fleet Engine في أساسيات 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، يُرجى الاطّلاع على مقالة مكتبات العملاء لخدمات الرحلات عند الطلب.

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

إعداد حزمة تطوير برامج (SDK) للسائق