المصادقة والترخيص

يوضح هذا القسم مفاهيم المصادقة والترخيص مع بشأن الدمج مع Fleet Engine.

يمكنك ضبط الإمكانات التي يوفّرها Last Mile Fleet Solution من خلال Google Cloud Console حِزم تطوير البرامج (SDK) الخاصة بإصدار Fleet Engine طلب استخدام رموز JSON المميّزة للويب (JWT) التي تم توقيعها بواسطة الخدمة المناسبة الحساب.

نظرة عامة

ينبغي أن تستخدم الواجهات الخلفية للعملاء عمليات المصادقة والتفويض ضد Fleet Engine القياسي الإعداد التلقائي للتطبيق بيانات الاعتماد والآليات الأخرى.

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

مبادئ تصميم المصادقة

يتضمن مسار المصادقة في Fleet Engine مبادئ التصميم التالية.

  • تحدِّد أدوار "إدارة الهوية وإمكانية الوصول" مجموعة من الأذونات على الموارد المسموح بها للمدير. على سبيل المثال، يُسمح لأدوار المشرف بتنفيذ كل الإجراءات باستخدام "الإعدادات التلقائية للتطبيق". بيانات الاعتماد، في حين يُسمح فقط بتحديث دور برنامج التشغيل غير الموثوق به* لموقع المركبة ويقتصر على استخدام JWT للمصادقة التفويض.

  • وبالنسبة إلى البيئات غير الموثوقة، فإن مطالبات JWT تقيّد الكيانات التي قد يعمل المتصل على. قد تكون هذه مهام محددة أو مركبات توصيل.

  • يجب أن يتم استدعاء الرمز الذي يعمل في بيئة ذات ثقة منخفضة أولاً على تشغيل رمز برمجي في بيئة موثوق بها لإصدار JWT.

  • تُجري Fleet Engine عمليات الفحص الأمني التالية على طلبات البيانات من واجهة برمجة التطبيقات المصدر:

    1. يمتلك مدير الاتصال الأذونات المناسبة (من خلال الدور) المهمة) للإجراء على المورد.

    2. بالنسبة إلى الأدوار غير الإدارية، تقدّم مطالبات JWT التي تم تمريرها في الطلب الإذن اللازم للمورد.

مسار المصادقة

يوضّح مخطط التسلسل التالي تفاصيل مسار المصادقة.

  1. ينشئ مشرف مجموعة الأجهزة حسابات الخدمة.

  2. يعيّن مشرف مجموعة الأجهزة أدوارًا محددة لإدارة الهوية وإمكانية الوصول إلى حسابات الخدمة.

  3. يضبط مشرف مجموعة الأجهزة الخلفية باستخدام حسابات الخدمة. وبيانات الاعتماد التلقائية للتطبيق.

  4. يطلب تطبيق العميل JWT من الواجهة الخلفية للعميل. يمكن لمقدم الطلب مثل تطبيق Driver أو تطبيق المستهلك أو تطبيق المراقبة.

  5. التوقيع على الواجهة الخلفية للعميل وإصدار JWT للخدمة المعنية الحساب. يتلقى تطبيق العميل JWT.

  6. يستخدم تطبيق العميل JWT للاتصال بتطبيق Fleet Engine للقراءة أو التعديل. اعتمادًا على أدوار "إدارة الهوية وإمكانية الوصول" المخصّصة لها أثناء مرحلة الإعداد.

الرسم التخطيطي لتسلسل المصادقة

إعداد مشروع على السحابة الإلكترونية

لإعداد مشروعك على السحابة الإلكترونية، عليك أولاً إنشاء مشروعك، ثم إنشاء حسابات الخدمة.

لإنشاء مشروعك على Google Cloud، اتّبِع الخطوات التالية:

  1. أنشِئ مشروعًا على Google Cloud باستخدام Google Cloud Console.
  2. باستخدام لوحة بيانات الخدمات وواجهات برمجة التطبيقات، مكِّن واجهة برمجة تطبيقات الرحلات المحلية والتسليمات

حسابات الخدمة أدوار "إدارة الهوية وإمكانية الوصول"

حساب الخدمة هو نوع خاص من الحسابات يستخدمها أحد التطبيقات، بدلاً من أي شخص. وعادة ما يُستخدم حساب الخدمة لإنشاء JWTs الذي يمنح مجموعات من الأذونات اعتمادًا على الدور. لتقليل احتمالية إساءة الاستخدام يمكنك إنشاء حسابات خدمة متعددة، لكل منها حد أدنى من مجموعة الأدوار. مطلوب ().

يستخدم Last Mile Fleet Solution الأدوار التالية:

الدورالوصف
مستخدم برنامج التشغيل الموثوق به في عملية تسليم Fleet Engine

roles/fleetengine.deliveryTrustedDriver
لمنح الإذن لإنشاء وتحديث مركبات التسليم ومهامه بما في ذلك تحديث موقع مركبة التسليم وحالة المهمة أو نتيجته. الرموز المميزة التي تم إنشاؤها بواسطة حساب خدمة بهذا الدور يتم استخدامها عادةً من الأجهزة الجوّالة لسائق التوصيل أو من لخوادم الخلفية.
مستخدم غير موثوق بسائق يقدّم مجموعة المحرّكات

roles/fleetengine.deliveryUntrustedDriver
يمنح الإذن بتعديل الموقع الجغرافي لمركبة التسليم. تم إنشاء الرموز المميّزة من حساب الخدمة الذي يتم منحه هذا الدور، يتم عادةً استخدامها من قسم "تسليم الأجهزة المحمولة للسائق.
مستخدم مستهلك نقل البيانات من مجموعة الأجهزة

roles/fleetengine.deliveryConsumer
يمنح الإذن للبحث عن المهام باستخدام رقم تعريف التتبع، وقراءة معلومات المهمة دون تحديثها. تم إنشاء الرموز المميّزة عادةً ما يتم استخدام هذا الدور من حساب خدمة متصفح الويب الخاص بالمستهلك.
مشرف تسليم محرّك الأسطول

roles/fleetengine.deliveryAdmin
يمنح الإذن بالقراءة والكتابة لموارد التسليم. المدراء الذين لديهم هذا الدور لا يحتاجون إلى استخدام JWTs، بل يمكنهم بدلاً من ذلك استخدام بيانات الاعتماد التلقائية. يتم تجاهل مطالبات JWT المخصّصة. يجب أن يكون هذا الدور مقتصرة على البيئات الموثوق بها (الواجهة الخلفية للعميل).
المستخدم الفائق في إرسال Fleet Engine **(تم إيقافه)**

roles/fleetengine.deliverySuperUser
يمنح الإذن لجميع مركبات التسليم وواجهات برمجة تطبيقات المهام. تم إنشاء الرموز المميّزة من خادم الخلفية، يتم استخدام هذا الدور عادةً من خلال حساب الخدمة. الخوادم.
قارئ أسطول نقل الأسطول

roles/fleetengine.deliveryFleetReader
لمنح الإذن لقراءة مهام ومركبات التسليم والبحث عن المهام باستخدام رقم تعريف التتبع. تم إنشاء الرموز المميزة بواسطة حساب خدمة باستخدام هذا عادةً ما يتم استخدام دور من متصفح الويب الخاص بمشغل مجموعة شركات التسليم.

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

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

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

إنشاء حساب الخدمة

يمكنك إنشاء حساب خدمة باستخدام IAM & Admin > Service Accounts. علامة التبويب في Google Cloud Console. من القائمة المنسدلة "الدور"، حدد Fleet Engine وتعيين أحد الأدوار إلى حساب الخدمة إنه جيد ممارسة للإشارة إلى الحساب المرتبط بكل دور. على سبيل المثال، امنح حساب الخدمة اسمًا ذا معنى.

ولتيسير الأمر، إذا كنت بحاجة إلى إنشاء JWT للعملاء غير الموثوق بهم، فإن إضافة من المستخدمين إلى "دور منشئ الرمز المميّز لحساب الخدمة" الذي يتيح لهم إنشاء رموز مميّزة باستخدام أدوات سطر أوامر gcloud.

gcloud projects add-iam-policy-binding project-id \
       --member=user:my-user@example.com \
       --role=roles/iam.serviceAccountTokenCreator

حيث my-user@example.com هو البريد الإلكتروني الذي اعتدت عليه للمصادقة باستخدام gcloud (gcloud auth list --format='value(account)').

مكتبة مصادقة Fleet Engine

تستخدم Fleet Engine ملفات JWT لحظر الوصول إلى واجهات برمجة تطبيقات Fleet Engine في الوحدات غير الموثوق بها. البيئات. مكتبة مصادقة Fleet Engine متوفّرة على GitHub يبسّط إنشاء JWT من Fleet Engine وتوقيعها بأمان.

توفر المكتبة الفوائد التالية:

  • تبسيط عملية إنشاء الرموز المميّزة لـ Fleet Engine
  • يتم توفير آليات توقيع الرمز المميز بخلاف استخدام ملفات بيانات الاعتماد (مثل انتحال هوية حساب خدمة).

إنشاء رمز JSON المميّز للويب (JWT) للتفويض

في حال عدم استخدام مكتبة مصادقة Fleet Engine، يجب أن تكون JWT مباشرةً داخل قاعدة التعليمات البرمجية. وهذا يتطلب منك إجراء تحليل فهم JWT وكيفية ارتباطها بـ Fleet Engine. هذا هو السبب في أننا ننصح بشدة بالاستفادة من مكتبة مصادقة Fleet Engine.

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

يحتوي قسم عنوان JWT على الحقول التالية:

الحقلالوصف
alg الخوارزمية المطلوب استخدامها. `RS256`.
typ تمثّل هذه السمة نوع الرمز المميّز. "JWT".
kid رقم تعريف المفتاح الخاص لحساب الخدمة. يمكنك العثور على هذه القيمة في الحقل "private_key_id" في ملف JSON لحساب الخدمة. تأكَّد من استخدام مفتاح من حساب خدمة يتضمّن مستوى الأذونات الصحيح.

يحتوي قسم مطالبات JWT على الحقول التالية:

الحقلالوصف
iss عنوان البريد الإلكتروني لحساب الخدمة.
sub عنوان البريد الإلكتروني لحساب الخدمة.
aud SERVICE_NAME لحساب الخدمة الخاص بك، في هذه الحالة https://fleetengine.googleapis.com/
iat الطابع الزمني الذي تم فيه إنشاء الرمز المميّز، والذي يتم تحديده بالثواني منذ 1 كانون الثاني (يناير) 1970، حتى الساعة 00:00:00 حسب التوقيت العالمي المنسَّق (UTC). اسمح لمدة 10 دقائق للحصول على انحراف. إذا كانت الطابع الزمني بعيد جدًا في الماضي، أو في المستقبل، قد يُبلغ الخادم عن خطأ.
exp الطابع الزمني لوقت انتهاء صلاحية الرمز المميّز، ويتم تحديده بالثواني منذ 1 كانون الثاني (يناير) 1970، حتى الساعة 00:00:00 حسب التوقيت العالمي المنسَّق (UTC). ويتعذّر إرسال الطلب إذا كان الطابع الزمني بعد أكثر من ساعة واحدة في المستقبل.
authorization حسب حالة الاستخدام، قد تحتوي على `deliveryvehicleid` أو `trackingid` أو `taskid` أو `taskids`.

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

مطالبات JWT

يستخدم Last Mile Fleet Solution مطالبات خاصة. يضمن استخدام المطالبات الخاصة ويمكن للعملاء المصرح لهم الوصول إلى بياناتهم الخاصة. على سبيل المثال، عندما تستخدم الخلفية يصدر رمز JSON مميزًا للويب لجهاز الجوّال لسائق التسليم، فينبغي أن تحتوي على المطالبة deliveryvehicleid مع قيمة التسليم من السائق معرّف المركبة. وبعد ذلك، وبناءً على دور السائق، لا تتيح الرموز المميزة الوصول إلا معرّف المركبة الذي تمّ تسليمه فقط وليس أيّ معرّف عشوائي آخر للمركبة

يستخدم Last Mile Fleet Solution المطالبات الخاصة التالية:

  • deliveryvehicleid: يُستخدم عند طلب واجهات برمجة التطبيقات (API) لكل مركبة.
  • taskid: يُستخدم عند طلب واجهات برمجة التطبيقات لكل مهمة.
  • taskids: يُستخدم عند الاتصال بالرقم BatchCreateTasksAPI. يجب أن يكون هذا الادعاء في شكل صفيف، ويجب أن تحتوي الصفيفة على جميع معرفات المهام اللازمة لإكمال الطلب. عدم تضمين delivervehicleid أو trackingid أو taskid مطالبة.
  • trackingid: تُستخدم عند الاتصال بـ GetTaskTrackingInfoAPI. يجب أن تطابق رقم تعريف التتبع في الطلب. لا تضِف delivervehicleid، taskid أو taskids مطالبة

يجب أن يحتوي الرمز المميز أيضًا على المطالبة المناسبة عند استدعاء واجهات برمجة التطبيقات من خادم الخلفية، ولكن يمكنك استخدام القيمة الخاصة لعلامة النجمة ("*") لـ deliveryvehicleid وtaskid وtrackingid مطالبة. علامة النجمة ("*") قد يُستخدَم أيضًا في المطالبة taskids، ولكن يجب أن يكون العنصر الوحيد. في الصفيفة.

إذا كنت ترغب في إنشاء ملف JSON وتوقيعه مباشرةً كحامل رمز مميز، بدلاً من باستخدام رموز دخول OAuth 2.0، يمكنك الاطلاع على إرشادات تفويض حساب الخدمة بدون بروتوكول OAuth في مستندات "مطوّر الهوية"

تعتمد آلية إرفاق الرمز المميّز بطلب gRPC على اللغة. وإطار العمل المستخدم لإجراء المكالمة. آلية تحديد الرمز المميّز إلى استدعاء HTTP هو تضمين عنوان تفويض مع رمز الحامل المميز الذي تكون قيمته هي الرمز المميز، كما هو مذكور في ملاحظات التفويض تتبُّع الشحن أو أداء مجموعة الأجهزة حالات الاستخدام.

يوضح المثال التالي رمزًا مميزًا لعملية لكل مهمة من خادم الخلفية:

    {
      "alg": "RS256",
      "typ": "JWT",
      "kid": "private_key_id_of_provider_service_account"
    }
    .
    {
      "iss": "provider@yourgcpproject.iam.gserviceaccount.com",
      "sub": "provider@yourgcpproject.iam.gserviceaccount.com",
      "aud": "https://fleetengine.googleapis.com/",
      "iat": 1511900000,
      "exp": 1511903600,
      "authorization": {
         "taskid": "*"
       }
    }

يوضح المثال التالي رمزًا مميزًا لعملية الإنشاء الجماعي من خادم الخلفية:

    {
      "alg": "RS256",
      "typ": "JWT",
      "kid": "private_key_id_of_provider_service_account"
    }
    .
    {
      "iss": "provider@yourgcpproject.iam.gserviceaccount.com",
      "sub": "provider@yourgcpproject.iam.gserviceaccount.com",
      "aud": "https://fleetengine.googleapis.com/",
      "iat": 1511900000,
      "exp": 1511903600,
      "authorization": {
         "taskids": ["*"]
       }
    }

يوضح المثال التالي رمزًا مميزًا لعملية لكل مركبة تسليم من خادم الخلفية:

    {
      "alg": "RS256",
      "typ": "JWT",
      "kid": "private_key_id_of_provider_service_account"
    }
    .
    {
      "iss": "provider@yourgcpproject.iam.gserviceaccount.com",
      "sub": "provider@yourgcpproject.iam.gserviceaccount.com",
      "aud": "https://fleetengine.googleapis.com/",
      "iat": 1511900000,
      "exp": 1511903600,
      "authorization": {
         "deliveryvehicleid": "*"
       }
    }

يعرض المثال التالي رمزًا مميزًا لعملاء المستخدمين:

    {
      "alg": "RS256",
      "typ": "JWT",
      "kid": "private_key_id_of_delivery_consumer_service_account"
    }
    .
    {
      "iss": "consumer@yourgcpproject.iam.gserviceaccount.com",
      "sub": "consumer@yourgcpproject.iam.gserviceaccount.com",
      "aud": "https://fleetengine.googleapis.com/",
      "iat": 1511900000,
      "exp": 1511903600,
      "authorization": {
         "trackingid": "shipment_12345"
       }
    }

يوضح المثال التالي رمزًا مميزًا لتطبيق برنامج التشغيل:

    {
      "alg": "RS256",
      "typ": "JWT",
      "kid": "private_key_id_of_delivery_driver_service_account"
    }
    .
    {
      "iss": "driver@yourgcpproject.iam.gserviceaccount.com",
      "sub": "driver@yourgcpproject.iam.gserviceaccount.com",
      "aud": "https://fleetengine.googleapis.com/",
      "iat": 1511900000,
      "exp": 1511903600,
      "authorization": {
         "deliveryvehicleid": "driver_12345"
       }
    }
  • بالنسبة إلى حقل kid في العنوان، حدِّد الخصوصية الخاصة بحساب الخدمة. معرِّف المفتاح. يمكنك العثور على هذه القيمة في الحقل private_key_id في ملف JSON لحساب الخدمة.
  • في الحقلين iss وsub، حدِّد عنوان البريد الإلكتروني لحساب الخدمة. يمكنك العثور على هذه القيمة في الحقل client_email ضمن حساب الخدمة. بتنسيق JSON.
  • بالنسبة إلى الحقل aud، حدِّد https://SERVICE_NAME/.
  • في الحقل iat، حدِّد الطابع الزمني عند إنشاء الرمز المميّز. بالثواني المنقضي منذ 00:00:00 بالتوقيت العالمي المنسق (UTC)، 1 كانون الثاني (يناير) 1970. الانتظار لمدة 10 دقائق عن الانحراف. وإذا كان الطابع الزمني بعيدًا جدًا في الماضي أو في المستقبل، الخادم عن خطأ.
  • في الحقل exp، حدِّد الطابع الزمني لانتهاء صلاحية الرمز المميّز. بالثواني منذ 00:00:00 حسب التوقيت العالمي المنسَّق (UTC) ، 1 كانون الثاني (يناير) 1970. القيمة المقترَحة هي iat + 3600.

عند توقيع الرمز المميّز الذي سيتم تمريره إلى جهاز جوّال أو مستخدم نهائي، تأكَّد من استخدام ملف بيانات الاعتماد لدور "سائق التسليم" أو "المستهلك" وإلا، سيتمكن الجهاز الجوّال أو المستخدم النهائي من تغيير المعلومات التي لا ينبغي لهم الوصول إليها.