يتناول هذا المستند كيفية إصدار رموز مميّزة بتنسيق JSON على الويب كجزء من السماح لتطبيقاتك المستندة إلى الويب والأجهزة الجوّالة بالوصول إلى بيانات Fleet Engine. إذا لم يسبق لك ذلك، يُرجى قراءة رموز JSON المميّزة للويب ضمن قسم الأمان في Fleet Engine. باستخدام خدمة Fleet Engine، يمكنك إصدار رموز JWT بإحدى الطرق التالية:
- استخدام مكتبة التفويض: تنصحك Google باتّباع هذا النهج عندما تكون قاعدة الرموز البرمجية مكتوبة بلغة Java. تتولّى هذه المكتبة إصدار رموز JWT لجميع سيناريوهات حالات الاستخدام التي قد تحتاج إليها مع الخدمة، كما أنّها تبسّط عملية التنفيذ إلى حد كبير.
- إنشاء رموز JWT المميزة: إذا لم تتمكّن من استخدام مكتبة رموز JWT المميزة، عليك إنشاء هذه الرموز في قاعدة الرموز الخاصة بك. يقدّم هذا القسم أمثلة مختلفة على رموز JWT لكل سيناريو.
طريقة عمل رموز JWT
بالنسبة إلى البيئات غير الموثوق بها، مثل الهواتف الجوّالة ومتصفّحات الويب، يرسل خادم الخلفية رموز JWT تعمل على النحو التالي:
يستدعي رمز العميل الذي يتم تشغيله في بيئة منخفضة الثقة رمز الخادم الذي يتم تشغيله في بيئة موثوقة بالكامل لطلب رمز JWT المناسب ليتم تمريره إلى Fleet Engine.
ترتبط رموز JWT بحسابات الخدمة، لذا فإنّ الطلبات المُرسَلة إلى Fleet Engine ترتبط ضمنيًا بحساب الخدمة الذي وقّع رمز JWT.
تفرض مطالبات JWT قيودًا إضافية على الموارد التي يمكن للعميل تنفيذ عمليات عليها، مثل مركبات أو رحلات أو مهام معيّنة.
استخدام مكتبة التفويض للغة Java
لاستخدام مكتبة تفويض Fleet Engine للغة Java، انتقِل إلى مستودع GitHub. تسهّل المكتبة إنشاء رموز JWT الخاصة بخدمة Fleet Engine وتوقيعها بشكل آمن. توفّر هذه الخدمة ما يلي:
- بيانات تبعية المشروع
- قائمة كاملة بجميع أدوار حسابات الخدمة للرحلات عند الطلب أو المهام المجدوَلة
- آليات توقيع الرموز المميزة غير استخدام ملفات بيانات الاعتماد، مثل انتحال هوية حساب خدمة
- إرفاق رموز مميزة موقَّعة بالطلبات الصادرة من إما برنامج gRPC أو مكتبة عميل Google API Codegen (GAPIC)
- تعليمات حول دمج الموقّعين مع مكتبات عملاء Fleet Engine
إذا كنت تصدر رموز JWT من الرمز البرمجي
إذا لم يكن بإمكانك استخدام مكتبة التفويض للغة Java، عليك تنفيذ رموز JWT في قاعدة الرموز الخاصة بك. يقدّم هذا القسم بعض الإرشادات لإنشاء الرموز المميّزة الخاصة بك. راجِع رموز JSON المميّزة للويب ضمن قسم الأمان في Fleet Engine للاطّلاع على قائمة بحقول وطلبات رموز JWT. راجِع أدوار حساب الخدمة لمعرفة أدوار حساب الخدمة التي تستخدمها Fleet Engine. راجِع القسم التالي للاطّلاع على قائمة بأمثلة على رموز JWT إما للرحلات عند الطلب أو للمهام المجدوَلة.
الإرشادات العامة
- استخدام حسابات الخدمة والأدوار المناسبة يضمن حساب الخدمة والدور المرتبط به حصول المستخدم الذي يطلب الرمز المميّز على إذن بعرض المعلومات التي يمنحه الرمز المميّز إذن الوصول إليها. على وجه التحديد:
- في حال توقيع رمز JWT ليتم تمريره إلى جهاز جوّال، استخدِم حساب الخدمة لدور حزمة تطوير البرامج (SDK) الخاصة بالسائق أو المستهلك. وبخلاف ذلك، يمكن للجهاز الجوّال تعديل البيانات والوصول إليها بدون إذن.
- في حال توقيع رمز JWT لاستخدامه في طلبات مميّزة، استخدِم حساب الخدمة الذي يتضمّن دور "مشرف Fleet Engine" الصحيح عند استخدام ADC أو رموز JWT. وفي حال عدم توفّرها، ستفشل العملية.
- مشاركة الرموز المميزة التي تم إنشاؤها فقط لا تشارك أبدًا بيانات الاعتماد المستخدَمة لإنشاء الرموز المميّزة.
- بالنسبة إلى طلبات gRPC، تعتمد آلية إرفاق الرمز المميّز على اللغة والإطار المستخدَمَين لإجراء الطلب. تتمثل آلية تحديد رمز مميز لطلب HTTP في تضمين عنوان
Authorization
مع رمز مميز لحامل الإذن تكون قيمته هي الرمز المميز. - إرجاع وقت انتهاء الصلاحية يجب أن يعرض الخادم وقت انتهاء صلاحية الرمز المميز، ويكون ذلك عادةً بالثواني.
- إذا كنت بحاجة إلى إنشاء ملف JSON وتوقيعه مباشرةً كحامل رمز مميز، بدلاً من استخدام رموز الدخول إلى الإصدار 2.0 من OAuth، يمكنك الاطّلاع على التعليمات الخاصة بتفويض حساب الخدمة بدون OAuth في مستندات Identity Developer.
للرحلات عند الطلب
- عند إنشاء حمولة JWT، أضِف مطالبة إضافية في قسم التفويض
مع المفتاح
vehicleid
أوtripid
الذي تم ضبطه على قيمة معرّف المركبة أو معرّف الرحلة التي يتم إجراء الطلب لها.
للمهام المُجدوَلة
- عندما يستدعي الخادم واجهات برمجة تطبيقات أخرى، يجب أن تحتوي الرموز المميزة أيضًا على المطالبة المناسبة. لإجراء ذلك، يمكنك اتّباع الخطوات التالية:
- اضبط قيمة كل مفتاح على
*
. - امنح المستخدم إذن الوصول إلى جميع
taskids
وdeliveryvehicleids
. لإجراء ذلك، عليك إضافة مطالبة إضافية في قسم التفويض باستخدام المفتاحينtaskid
وdeliveryvehicleid
. - عند استخدام علامة النجمة (
*
) في مطالبةtaskids
، يجب أن تكون العنصر الوحيد في المصفوفة.
- اضبط قيمة كل مفتاح على
أمثلة على رموز JWT للرحلات عند الطلب
يقدّم هذا القسم أمثلة على رموز JWT للسيناريوهات الشائعة في حال استخدام الرحلات عند الطلب.
مثال على رمز مميّز لعملية في تطبيق سائق
{
"alg": "RS256",
"typ": "JWT",
"kid": "private_key_id_of_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": {
"vehicleid": "driver_12345"
}
}
مثال على رمز مميّز لعملية تطبيق استهلاكي
{
"alg": "RS256",
"typ": "JWT",
"kid": "private_key_id_of_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": {
"tripid": "trip_54321"
}
}
أمثلة على رموز JWT للمهام المُجدوَلة
يقدّم هذا القسم مثالاً على رمز JWT للسيناريوهات النموذجية في حال استخدام مهام مجدوَلة.
مثال على رمز مميّز لتطبيق سائق
{
"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"
}
}
مثال على رمز مميّز لتطبيق موجّه للمستهلكين
{
"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"
}
}
أمثلة على رموز JWT لعمليات الأسطول
يقدّم هذا القسم مثالاً على رمز JWT لسيناريو نموذجي في عمليات أسطول المركبات.
مثال على رمز مميّز لتتبُّع جميع المهام والمركبات في أسطول
المثال التالي هو رمز مميّز يتتبّع جميع المهام والمركبات في أسطول من تطبيق مستند إلى الويب يستخدمه مشغّل. تتطلّب هذه العمليات أذونات أكثر من تلك التي تتطلّبها تطبيقات العميل. راجِع مقالة إعداد مكتبة JavaScript لتتبُّع الأسطول لمعرفة تفاصيل التنفيذ من جهة العميل الذي سيستخدم هذا الرمز المميز:
وقِّع الرمز المميّز باستخدام دور
Fleet Engine Delivery Fleet Reader
Cloud IAM.
{
"alg": "RS256",
"typ": "JWT",
"kid": "private_key_id_of_consumer_service_account"
}
.
{
"iss": "superuser@yourgcpproject.iam.gserviceaccount.com",
"sub": "superuser@yourgcpproject.iam.gserviceaccount.com",
"aud": "https://fleetengine.googleapis.com/",
"iat": 1511900000,
"exp": 1511903600,
"scope": "https://www.googleapis.com/auth/xapi",
"authorization": {
"taskid": "*",
"deliveryvehicleid": "*",
}
}
طريقة مصادقة بديلة لعمليات خادم الخلفية
تنصحك Google باستخدام ADC لمصادقة عمليات خادم الخلفية. إذا تعذّر عليك استخدام ADC وكنت بحاجة إلى استخدام رموز JWT، يمكنك الرجوع إلى هذه الأمثلة.
مثال على رمز مميز لعملية خادم خلفي عند الطلب
{ "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": { "vehicleid": "*", "tripid": "*" } }
مثال على رمز مميّز لعملية مجدولة على خادم الخلفية
{ "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": "*" } }
الخطوات التالية
- تأكَّد من صحة الإعدادات لتتمكّن من إنشاء مركبة تجريبية والتأكّد من أنّ الرموز المميزة تعمل على النحو المطلوب.
- للحصول على معلومات حول استخدام ADC بدلاً من رموز JWT في عمليات خادم الخلفية، راجِع نظرة عامة حول الأمان.