يوضّح هذا المستند كيفية استخدام التطبيقات المثبّتة على أجهزة مثل الهواتف والأجهزة اللوحية وأجهزة الكمبيوتر لنقاط نهاية OAuth 2.0 من Google من أجل السماح بالوصول إلى Google APIs.
يتيح بروتوكول OAuth 2.0 للمستخدمين مشاركة بيانات محدَّدة مع أحد التطبيقات والحفاظ على خصوصية أسماء المستخدمين وكلمات المرور والمعلومات الأخرى. على سبيل المثال، يمكن لأحد التطبيقات استخدام OAuth 2.0 للحصول على إذن من المستخدمين لتخزين الملفات في Google Drive.
يتم توزيع التطبيقات المثبّتة على الأجهزة الفردية، ويُفترض أنّ هذه التطبيقات لا يمكنها الاحتفاظ بالمعلومات السرية. ويمكنها الوصول إلى Google APIs عندما يكون المستخدم نشطًا على التطبيق أو عندما يكون التطبيق قيد التشغيل في الخلفية.
يشبه مسار التفويض هذا المسار المستخدَم في تطبيقات خادم الويب. يكمن الاختلاف الرئيسي في أنّ التطبيقات المثبّتة يجب أن تفتح متصفّح النظام وتوفّر معرّف موارد منتظم (URI) لإعادة التوجيه على الجهاز من أجل معالجة الردود من خادم التفويض في Google.
المكتبات والعيّنات
بالنسبة إلى تطبيقات iOS، ننصح باستخدام أحدث إصدار من حزمة تطوير البرامج (SDK) لميزة "تسجيل الدخول باستخدام حساب Google" على أجهزة iOS. تتعامل حزمة تطوير البرامج (SDK) مع تفويض المستخدم، وهي أسهل في التنفيذ من البروتوكول ذي المستوى الأدنى الموضّح في هذا الدليل.
بالنسبة إلى التطبيقات التي تعمل على أجهزة لا تتوافق مع متصفّح النظام أو التي تتضمّن إمكانات إدخال محدودة، مثل أجهزة التلفزيون أو وحدات تحكّم الألعاب أو الكاميرات أو الطابعات، يُرجى الاطّلاع على OAuth 2.0 لأجهزة التلفزيون والأجهزة الأخرى أو تسجيل الدخول على أجهزة التلفزيون والأجهزة ذات الإمكانات المحدودة للإدخال.
المتطلبات الأساسية
تفعيل واجهات برمجة التطبيقات لمشروعك
يجب أن يفعّل أي تطبيق يطلب بيانات من Google APIs واجهات برمجة التطبيقات هذه في "وحدة تحكّم واجهة برمجة التطبيقات".
لتفعيل واجهة برمجة تطبيقات لمشروعك، اتّبِع الخطوات التالية:
- افتح مكتبة واجهات برمجة التطبيقات في Google API Console.
- اختَر مشروعًا أو أنشِئ مشروعًا جديدًا إذا طُلب منك ذلك.
- تعرض "مكتبة واجهة برمجة التطبيقات" جميع واجهات برمجة التطبيقات المتاحة، مجمّعة حسب مجموعة المنتجات ومدى رواجها. إذا لم تظهر واجهة برمجة التطبيقات التي تريد تفعيلها في القائمة، استخدِم البحث للعثور عليها، أو انقر على عرض الكل في مجموعة المنتجات التي تنتمي إليها.
- اختَر واجهة برمجة التطبيقات التي تريد تفعيلها، ثم انقر على الزر تفعيل.
- فعِّل الفوترة إذا طُلب منك ذلك.
- اقرأ بنود خدمة واجهة برمجة التطبيقات ووافِق عليها إذا طُلب منك ذلك.
إنشاء بيانات اعتماد التفويض
يجب أن يتوفّر لأي تطبيق يستخدم OAuth 2.0 للوصول إلى Google APIs بيانات اعتماد تفويض تُعرّف التطبيق لخادم OAuth 2.0 من Google. توضّح الخطوات التالية كيفية إنشاء بيانات اعتماد لمشروعك. ويمكن لتطبيقاتك بعد ذلك استخدام بيانات الاعتماد للوصول إلى واجهات برمجة التطبيقات التي فعّلتها لهذا المشروع.
- انتقِل إلى صفحة "العملاء".
- انقر على إنشاء عميل.
- توضّح الأقسام التالية أنواع برامج العميل التي يتيحها خادم التفويض في Google. اختَر نوع العميل المقترَح لتطبيقك، وأدخِل اسمًا لعميل OAuth، واضبط الحقول الأخرى في النموذج حسب الاقتضاء.
iOS
- اختَر نوع التطبيق iOS.
- أدخِل اسمًا لعميل OAuth. يتم عرض هذا الاسم في صفحة "العملاء" الخاصة بمشروعك لتحديد العميل.
- أدخِل معرّف الحزمة لتطبيقك. معرّف الحزمة هو قيمة مفتاح CFBundleIdentifier في ملف موارد قائمة سمات معلومات تطبيقك (info.plist). يتم عرض القيمة عادةً في لوحة General (عام) أو لوحة Signing & Capabilities (التوقيع والإمكانات) في محرّر مشاريع Xcode. يتم عرض معرّف الحزمة أيضًا في قسم "المعلومات العامة" في صفحة "معلومات التطبيق" الخاصة بالتطبيق على موقع App Store Connect الإلكتروني من Apple.
تأكَّد من استخدام معرّف الحزمة الصحيح لتطبيقك، لأنّه لن يكون بإمكانك تغييره إذا كنت تستخدم ميزة "فحص التطبيقات".
- (اختياري)
أدخِل معرّف تطبيقك في App Store إذا كان التطبيق منشورًا في Apple App Store. "رقم تعريف المتجر" هو سلسلة رقمية مضمّنة في كل عنوان URL في Apple App Store.
- افتح تطبيق Apple App Store على جهاز iOS أو iPadOS.
- ابحث عن تطبيقك.
- انقر على الزر "مشاركة" (رمز المربّع والسهم المتّجه للأعلى).
- انقر على نسخ الرابط.
- الصِق الرابط في محرِّر نصوص. معرّف متجر التطبيقات هو الجزء الأخير من عنوان URL.
مثلاً:
https://apps.apple.com/app/google/id284815942
- (اختياري)
أدخِل معرّف الفريق. لمزيد من المعلومات، يُرجى الاطّلاع على مقالة تحديد رقم تعريف الفريق في مستندات حساب المطوّر على Apple.
ملاحظة: حقل "رقم تعريف الفريق" مطلوب إذا كنت تفعّل ميزة "فحص التطبيقات" لعميلك. - (اختياري)
فعِّل ميزة "فحص التطبيقات" لتطبيق iOS. عند تفعيل هذه الميزة، يتم استخدام خدمة App Attest من Apple للتحقّق من أنّ طلبات OAuth 2.0 الصادرة من عميل OAuth حقيقية وأنّها واردة من تطبيقك. يساعد ذلك في تقليل خطر انتحال هوية التطبيق. مزيد من المعلومات عن تفعيل ميزة "فحص التطبيقات" لتطبيق iOS
- انقر على إنشاء.
أجهزة الكمبيوتر
- اختَر نوع التطبيق تطبيق متوافق مع الكمبيوتر المكتبي.
- في حقل الاسم، أدخِل اسمًا لعميل OAuth. يتم عرض هذا الاسم في صفحة "العملاء" الخاصة بمشروعك لتحديد العميل.
- انقر على إنشاء.
تحديد نطاقات الوصول
تتيح النطاقات لتطبيقك طلب الوصول إلى الموارد التي يحتاجها فقط، مع السماح للمستخدمين بالتحكّم في مقدار الوصول الذي يمنحونه لتطبيقك. وبالتالي، قد تكون هناك علاقة عكسية بين عدد النطاقات المطلوبة واحتمال الحصول على موافقة المستخدم.
قبل البدء في تنفيذ تفويض OAuth 2.0، ننصحك بتحديد النطاقات التي سيحتاج تطبيقك إلى إذن للوصول إليها.
يحتوي مستند نطاقات OAuth 2.0 API على قائمة كاملة بالنطاقات التي يمكنك استخدامها للوصول إلى Google APIs.
الحصول على رموز الدخول عبر OAuth 2.0
توضّح الخطوات التالية كيفية تفاعل تطبيقك مع خادم OAuth 2.0 من Google للحصول على موافقة المستخدم على تنفيذ طلب بيانات من واجهة برمجة التطبيقات نيابةً عنه. ويجب أن يحصل تطبيقك على هذه الموافقة قبل أن يتمكّن من تنفيذ طلب بيانات من واجهة برمجة تطبيقات Google يتطلّب تفويضًا من المستخدم.
الخطوة 1: إنشاء أداة التحقّق من الرمز والتحدي
تتيح Google استخدام بروتوكول Proof Key for Code Exchange (PKCE) لجعل مسار التطبيق المثبّت أكثر أمانًا. يتم إنشاء أداة تحقّق فريدة من الرمز لكل طلب تفويض، ويتم إرسال قيمتها المحوَّلة، والتي تُعرف باسم "code_challenge"، إلى خادم التفويض للحصول على رمز التفويض.
إنشاء أداة التحقّق من الرمز
code_verifier هي سلسلة عشوائية مشفّرة ذات عشوائية عالية تستخدم الأحرف غير المحجوزة
[A-Z] / [a-z] / [0-9] / "-" / "." / "_" / "~"، بحد أدنى للطول يبلغ 43 حرفًا
وحد أقصى للطول يبلغ 128 حرفًا.
يجب أن يحتوي أداة التحقّق من الرمز على إنتروبيا كافية لجعل تخمين القيمة غير عملي.
إنشاء رمز التحقّق
تتوفّر طريقتان لإنشاء تحدّي الرمز.
| طرق إنشاء تحدّي الرمز | |
|---|---|
| S256 (يُنصح به) | رمز التحدي هو تجزئة SHA256 لرمز التحقق بترميز Base64URL (بدون إضافة).
|
| plain | تحدّي الرمز هو القيمة نفسها التي تم إنشاؤها أعلاه لمدقّق الرمز.
|
الخطوة 2: إرسال طلب إلى خادم OAuth 2.0 من Google
للحصول على تفويض المستخدم، أرسِل طلبًا إلى خادم التفويض في Google على
https://accounts.google.com/o/oauth2/v2/auth. تعالج نقطة النهاية هذه عملية البحث عن الجلسات النشطة،
وتصادق المستخدم، وتحصل على موافقته. لا يمكن الوصول إلى نقطة النهاية إلا عبر طبقة المقابس الآمنة (SSL)، وهي ترفض اتصالات HTTP (غير المتوافقة مع طبقة المقابس الآمنة).
يتيح خادم التفويض مَعلمات سلسلة طلب البحث التالية للتطبيقات المثبّتة:
| المعلمات | |||||||
|---|---|---|---|---|---|---|---|
client_id |
مطلوب
معرّف العميل لتطبيقك يمكنك العثور على هذه القيمة في صفحة "العملاء" ضمن Cloud Console. |
||||||
redirect_uri |
مطلوب
يحدّد هذا المَعلمة كيفية إرسال خادم التفويض في Google لردّ إلى تطبيقك. تتوفّر عدة خيارات لإعادة التوجيه للتطبيقات المثبّتة، وسيكون عليك إعداد بيانات اعتماد التفويض باستخدام طريقة إعادة توجيه معيّنة. يجب أن تتطابق القيمة تمامًا مع أحد عناوين URI المصرّح بها لإعادة التوجيه لعميل OAuth 2.0، والتي تم ضبطها في صفحة "العملاء" في Cloud Console الخاصة بالعميل. إذا لم تتطابق هذه القيمة مع معرّف موارد منتظم (URI) معتمَد، سيظهر لك الخطأ يعرض الجدول قيمة المَعلمة
|
||||||
response_type |
مطلوب
يحدّد هذا الإعداد ما إذا كانت نقطة نهاية Google OAuth 2.0 ستعرض رمز تفويض. اضبط قيمة المَعلمة على |
||||||
scope |
مطلوب
قائمة مفصولة بمسافات تتضمّن النطاقات التي تحدّد الموارد التي يمكن لتطبيقك الوصول إليها نيابةً عن المستخدم. تُعلم هذه القيم شاشة طلب الموافقة التي تعرضها Google للمستخدم. تتيح النطاقات لتطبيقك طلب الوصول إلى الموارد التي يحتاج إليها فقط، كما تتيح للمستخدمين التحكّم في مقدار الوصول الذي يمنحونه لتطبيقك. وبالتالي، هناك علاقة عكسية بين عدد النطاقات المطلوبة واحتمال الحصول على موافقة المستخدم. |
||||||
code_challenge |
مقترَح
تحدّد هذه السمة |
||||||
code_challenge_method |
مقترَح
تحدّد الطريقة التي تم استخدامها لترميز |
||||||
state |
مقترَح
تحدّد أي قيمة سلسلة يستخدمها تطبيقك للحفاظ على الحالة بين طلب التفويض واستجابة خادم التفويض.
يعرض الخادم القيمة الدقيقة التي ترسلها كزوج يمكنك استخدام هذه المَعلمة لأغراض متعددة، مثل توجيه المستخدم إلى المورد الصحيح في تطبيقك وإرسال أرقام تُستخدم لمرة واحدة والحدّ من تزوير الطلبات من مواقع إلكترونية مختلفة. بما أنّه يمكن تخمين |
||||||
login_hint |
اختياريّ
إذا كان تطبيقك يعرف المستخدم الذي يحاول المصادقة، يمكنه استخدام هذه المَعلمة لتقديم تلميح إلى خادم مصادقة Google. يستخدم الخادم التلميح لتبسيط عملية تسجيل الدخول، إما من خلال ملء حقل البريد الإلكتروني مسبقًا في نموذج تسجيل الدخول أو من خلال اختيار جلسة تسجيل الدخول المتعددة المناسبة. اضبط قيمة المَعلمة على عنوان بريد إلكتروني أو معرّف |
||||||
نماذج عناوين URL للتفويض
تعرض علامات التبويب أدناه نماذج عناوين URL للمصادقة لخيارات عناوين URI المختلفة لإعادة التوجيه.
عنوانا URL متطابقان باستثناء قيمة المَعلمة redirect_uri. وتتضمّن عناوين URL أيضًا المَعلمتَين المطلوبتَين response_type وclient_id، بالإضافة إلى المَعلمة الاختيارية state. يحتوي كل عنوان URL على فواصل أسطر ومسافات لتسهيل القراءة.
مخطّط URI مخصّص
https://accounts.google.com/o/oauth2/v2/auth? scope=email%20profile& response_type=code& state=security_token%3D138r5719ru3e1%26url%3Dhttps%3A%2F%2Foauth2.example.com%2Ftoken& redirect_uri=com.example.app%3A/oauth2redirect& client_id=client_id
عنوان IP للاسترجاع
https://accounts.google.com/o/oauth2/v2/auth? scope=email%20profile& response_type=code& state=security_token%3D138r5719ru3e1%26url%3Dhttps%3A%2F%2Foauth2.example.com%2Ftoken& redirect_uri=http%3A//127.0.0.1%3A9004& client_id=client_id
الخطوة 3: تطلب Google من المستخدم الموافقة
في هذه الخطوة، يقرّر المستخدم ما إذا كان سيمنح تطبيقك إذن الوصول المطلوب. في هذه المرحلة، تعرض Google نافذة موافقة تتضمّن اسم تطبيقك وخدمات Google API التي يطلب التطبيق إذنًا بالوصول إليها باستخدام بيانات اعتماد التفويض الخاصة بالمستخدم وملخّصًا لنطاقات الوصول التي سيتم منحها. ويمكن للمستخدم بعد ذلك الموافقة على منح إذن الوصول إلى نطاق واحد أو أكثر من النطاقات التي يطلبها تطبيقك أو رفض الطلب.
لا يحتاج تطبيقك إلى تنفيذ أي إجراء في هذه المرحلة أثناء انتظار الردّ من خادم OAuth 2.0 في Google للإشارة إلى ما إذا تم منح أي إذن بالوصول. يتم شرح هذا الرد في الخطوة التالية.
الأخطاء
قد تعرض الطلبات المرسَلة إلى نقطة نهاية تفويض OAuth 2.0 من Google رسائل خطأ موجّهة للمستخدمين بدلاً من مسارات المصادقة والتفويض المتوقّعة. في ما يلي رموز الخطأ الشائعة والحلول المقترَحة:
admin_policy_enforced
لا يمكن لحساب Google تفويض نطاق واحد أو أكثر من النطاقات المطلوبة بسبب سياسات مشرف Google Workspace. يمكنك الاطّلاع على مقالة المساعدة الخاصة بمشرف Google Workspace التحكّم في اختيار التطبيقات الداخلية والخارجية التي يمكنها الوصول إلى بيانات Google Workspace لمزيد من المعلومات حول كيفية حظر المشرف للوصول إلى جميع النطاقات أو النطاقات الحساسة والمحظورة إلى أن يتم منح الإذن صراحةً لمعرّف عميل OAuth.
disallowed_useragent
يتم عرض نقطة نهاية التفويض داخل وكيل مستخدم مضمّن لا تسمح به سياسات OAuth 2.0 في Google.
قد يواجه مطوّرو تطبيقات iOS وmacOS هذا الخطأ عند فتح طلبات التفويض في
WKWebView.
بدلاً من ذلك، على المطوّرين استخدام مكتبات iOS، مثل
تسجيل الدخول باستخدام حساب Google لنظام التشغيل iOS أو
AppAuth لنظام التشغيل iOS من مؤسسة OpenID.
قد يواجه مطوّرو تطبيقات الويب هذا الخطأ عندما يفتح تطبيق iOS أو macOS رابط ويب عامًا في وكيل مستخدم مضمّن وينتقل المستخدم إلى نقطة نهاية تفويض OAuth 2.0 من Google من موقعك الإلكتروني. على المطوّرين السماح بفتح الروابط العامة في معالج الروابط التلقائي لنظام التشغيل، والذي يتضمّن كلاً من معالجات الروابط العامة أو تطبيق المتصفّح التلقائي. وتُعدّ مكتبة SFSafariViewController أيضًا خيارًا متاحًا.
org_internal
معرّف عميل OAuth في الطلب هو جزء من مشروع يقيّد الوصول إلى حسابات Google في مؤسسة Google Cloud معيّنة. لمزيد من المعلومات حول خيار الضبط هذا، يُرجى الاطّلاع على قسم نوع المستخدم في مقالة المساعدة "إعداد شاشة طلب الموافقة عبر OAuth".
deleted_client
تم حذف عميل OAuth المستخدَم لإرسال الطلب. يمكن أن يتم الحذف يدويًا أو تلقائيًا في حال عدم استخدام العملاء . يمكن استعادة العملاء المحذوفين في غضون 30 يومًا من الحذف. مزيد من المعلومات
invalid_grant
في حال استخدام أداة التحقّق من الرمز والتحدي، تكون المَعلمة code_callenge غير صالحة أو غير متوفّرة. تأكَّد من ضبط المَعلمة code_challenge بشكل صحيح.
عند إعادة تحميل رمز الدخول، قد يكون الرمز قد انتهت صلاحيته أو تم إبطاله. يُرجى مصادقة المستخدم مرة أخرى وطلب موافقته للحصول على رموز مميزة جديدة. إذا استمر ظهور هذا الخطأ، تأكَّد من ضبط تطبيقك بشكل صحيح ومن استخدام الرموز المميّزة والمَعلمات الصحيحة في طلبك. وإلا، قد يكون حساب المستخدم قد تم حذفه أو إيقافه.
redirect_uri_mismatch
لا يتطابق redirect_uri الذي تم تمريره في طلب التفويض مع معرّف موارد منتظم (URI) معتمَد لإعادة التوجيه لمعرّف عميل OAuth. راجِع معرِّفات الموارد المنتظمة (URI) المعتمَدة لإعادة التوجيه في صفحة "العملاء" ضمن Google Cloud Console.
قد تكون قيمة redirect_uri التي تم تمريرها غير صالحة لنوع العميل.
قد تشير المَعلمة redirect_uri إلى عملية OAuth خارج النطاق (OOB) التي تم إيقافها نهائيًا ولم تعُد متاحة. يُرجى الرجوع إلى
دليل نقل البيانات لتعديل
عملية الدمج.
invalid_request
حدث خطأ في الطلب الذي قدّمته. قد يرجع ذلك إلى عدة أسباب:
- لم يتم تنسيق الطلب بشكل صحيح
- لم يتضمّن الطلب المَعلمات المطلوبة
- يستخدم الطلب طريقة مصادقة لا تتيحها Google. التأكّد من أنّ عملية دمج OAuth تستخدم طريقة دمج مقترَحة
- تم استخدام مخطّط مخصّص غير متوافق مع معرّف الموارد المنتظم (URI) لإعادة التوجيه. إذا ظهرت لك رسالة الخطأ مخطّط URI المخصّص غير متوافق مع تطبيقات Android أو Chrome، يمكنك التعرّف على مزيد من المعلومات عن بدائل مخطّط URI المخصّص.
الخطوة 4: معالجة استجابة خادم OAuth 2.0
تعتمد الطريقة التي يتلقّى بها تطبيقك ردّ التفويض على
مخطّط URI لإعادة التوجيه الذي يستخدمه. بغض النظر عن المخطط، سيحتوي الردّ إما على رمز تفويض (code) أو خطأ (error). على سبيل المثال، يشير error=access_denied إلى أنّ المستخدم رفض الطلب.
إذا منح المستخدم إذن الوصول إلى تطبيقك، يمكنك استبدال رمز التفويض برمز مميز للدخول ورمز مميز لإعادة التحميل كما هو موضّح في الخطوة التالية.
الخطوة 5: تبديل رمز التفويض برموز مميّزة لإعادة التحميل والوصول
لتبديل رمز التفويض برمز دخول، يمكنك استدعاء نقطة النهاية https://oauth2.googleapis.com/token وضبط المَعلمات التالية:
| الحقول | |
|---|---|
client_id |
معرِّف العميل الذي تم الحصول عليه من صفحة "العملاء" في Cloud Console |
client_secret |
اختياريّ
سر العميل الذي تم الحصول عليه من صفحة "العملاء" في Cloud Console. |
code |
رمز التفويض الذي تم إرجاعه من الطلب الأولي |
code_verifier |
مُدقّق الرمز الذي أنشأته في الخطوة 1 |
grant_type |
وفقًا لمواصفات OAuth 2.0، يجب ضبط قيمة هذا الحقل على authorization_code. |
redirect_uri |
أحد معرّفات الموارد المنتظمة (URI) لإعادة التوجيه المدرَجة لمشروعك في
صفحة "العملاء" في Cloud Console
لـ
client_id المحدّد. |
على الرغم من أنّ استخدام DPoP اختياري، ننصح به لتعزيز الأمان. يعتمد أمان DPoP على حصر المفتاح الخاص بجهاز واحد، لذا ننصح بتخزينه بطريقة لا يمكن من خلالها نسخه خارج الجهاز، على سبيل المثال باستخدام وحدات النظام الأساسي الموثوقة (TPM) أو الجيوب الآمنة أو غيرها من مخازن المفاتيح المستنِدة إلى الأجهزة. لاستخدام DPoP، يجب أن ينشئ تطبيقك رمز JWT جديدًا وفريدًا لإثبات DPoP لكل طلب إلى نقطة نهاية الرمز المميّز وإضافته كعنوان طلب HTTP.
| العنوان | مطلوب | الوصف |
|---|---|---|
DPoP |
اختياري | إثبات DPoP هو رمز JWT يثبت
حيازة مفتاح خاص. هذا عنوان وليس مَعلمة. وفي حال توفيره، يتم ربط الرموز المميّزة التي تم عرضها بهذا المفتاح. يجب إنشاء إثبات جديد وفريد لكل طلب، ويجب أن يتضمّن المطالبتَين htm (طريقة HTTP) وhtu (معرّف الموارد المنتظم لبروتوكول HTTP) اللتين تتطابقان مع الطلب. |
يعرض المقتطف التالي نموذجًا لطلب:
POST /token HTTP/1.1 Host: oauth2.googleapis.com Content-Type: application/x-www-form-urlencoded DPoP: eyJ0eXAiOiJkcG9wK2p3dCIsImFsZyI6IkVTMjU2IiwiandrIjp7Imt0eSI6Ik\ VDIiwieCI6Imw4dEZyaHgtMzR0VjNoUklDUkRZOXpDa0RscEJoRjQyVVFVZldWQVdCR\ nMiLCJ5IjoiOVZFNGpmX09rX282NHpiVFRsY3VOSmFqSG10NnY5VERWclUwQ2R2R1JE\ QSIsImNydiI6IlAtMjU2In19.eyJqdGkiOiItQndDM0VTYzZhY2MybFRjIiwiaHRtIj\ oiUE9TVCIsImh0dSI6Imh0dHBzOi8vc2VydmVyLmV4YW1wbGUuY29tL3Rva2VuIiwia\ WF0IjoxNTYyMjYyNjE2fQ.2-GxA6T8lP4vfrg8v-FdWP0A0zdrj8igiMLvqRMUvwnQg\ 4PtFLbdLXiOSsX0x7NVY-FNyJK70nfbV37xRZT3Lg code=4/P7q7W91a-oMsCeLvIaQm6bTrgtp7& client_id=your_client_id& redirect_uri=http://127.0.0.1:9004& grant_type=authorization_code
إنشاء إثبات DPoP
توضّح الخطوات التالية كيفية إنشاء إثبات DPoP باستخدام OpenSSL من سطر الأوامر:
- إنشاء مفتاحَي تشفير EC P-256:
openssl ecparam -name prime256v1 -genkey -noout -out dpop_private.pem openssl ec -in dpop_private.pem -pubout -out dpop_public.pem
- إنشاء عنوان DPoP:
يجب أن يتضمّن العنوان المطالبات
typوalgوjwk(المفتاح العام). تمثّل القيمتانxوyالإحداثيات المشفّرة باستخدام Base64Url لمفتاح EC العام. ترميز Base64Url لملف JSON هذا:{ "typ":"dpop+jwt", "alg":"ES256", "jwk": { "kty":"EC", "x":"YOUR_PUBLIC_KEY_X", "y":"YOUR_PUBLIC_KEY_Y", "crv":"P-256" } } - إنشاء حمولة DPoP:
يجب أن تتضمّن الحمولة
jti(معرّف فريد للطلب) وhtm(طريقة HTTP، مثلPOST) وhtu(معرّف الموارد المنتظم (URI) لبروتوكول HTTP، مثلhttps://oauth2.googleapis.com/token) وiat(وقت الإصدار). إذا تلقّيت رقمًا خاصًا من الخادم في رأسDPoP-Nonceفي الردّ على طلب سابق، يجب تضمين قيمة هذا الرقم في مطالبةnonce. تكون مطالبة nonce اختيارية لعمليات تبادل رموز التفويض، ولا تُستخدم إلا عند تلقّي عنوان DPoP-Nonce سابقًا. ترميز Base64Url لملف JSON هذا:{ "jti":"JTI_VALUE", "htm":"POST", "htu":"https://oauth2.googleapis.com/token", "iat":YOUR_JWT_ISSUED_TIME, "nonce":"SERVER_PROVIDED_NONCE" }تعتمد قيمة
jtiعلى نوع التبادل:- بالنسبة إلى عمليات تبادل رموز التفويض، يجب أن تكون قيمة
jtiهي تجزئة SHA256 لرمز التفويض بترميز Base64Url:"jti":"BASE64URL(SHA256(AUTHORIZATION_CODE))". - بالنسبة إلى عمليات تبادل الرموز المميزة لإعادة التحميل، يجب أن تكون قيمة
jtiمعرّفًا فريدًا لكل طلب:"jti":"YOUR_UNIQUE_PER_REQUEST_IDENTIFIER".
- بالنسبة إلى عمليات تبادل رموز التفويض، يجب أن تكون قيمة
- التوقيع على الإثبات:
ادمج العنوان المرمّز والحمولة مع نقطة (
.)، ثم وقِّع النتيجة باستخدام مفتاحك الخاص باستخدام ES256. يُرجى العِلم أنّ JWS يتطلّب أن يكون التوقيع بتنسيقR | Sأولي مدمج (64 بايت لـ P-256). في حال استخدام OpenSSL مباشرةً، يجب تحويل التوقيع التلقائي المرمَّز بتنسيق ASN.1 DER إلى هذا التنسيق الأولي.
تتم الإشارة إلى عملية التبادل الناجحة من خلال استجابة 200 OK
تحتوي على الرموز المميّزة. إذا تم استخدام إثبات DPoP صالح أثناء عملية التبادل، سيكون الرمز المميز لإعادة التحميل الذي تعرضه Google مرتبطًا بمفتاحك من خلال DPoP، ولكن لن تكون رموز الدخول مرتبطة من خلال DPoP. ستحتفظ رموز الدخول بـ token_type
Bearer بدلاً من DPoP.
بالإضافة إلى ذلك، يعرض Google عنوان HTTP يتضمّن DPoP-Nonce في الاستجابة.
يجب أن يخزّن برنامجك هذا الرقم الخاص مؤقتًا ويضمّنه في مطالبة nonce لإثبات DPoP
في الطلبات اللاحقة (مثل عند استبدال الرمز المميز لإعادة التحميل برمز دخول جديد، أو عند
طلب واجهات برمجة تطبيقات محمية ببروتوكول DPoP). باستخدام هذا الرقم الخاص الصادر مبكرًا، يمكنك تجنُّب حدوث خطأ إضافي في الذهاب والعودة (use_dpop_nonce) في طلبك التالي.
يجب تضمين إثباتات DPoP في طلبات تبادل الرموز المميزة التي يتم إجراؤها باستخدام الرموز المميزة لإعادة التحميل المرتبطة بـ DPoP.
يحدث فشل في عملية التبادل إذا كان عنوان DPoP غير متوفّر عندما يكون متوقّعًا أو غير صالح، أو إذا كان الإثبات يستخدم مفتاحًا مختلفًا عن المفتاح المرتبط بالرمز المميّز. وفي هذه الحالات، يعرض الخادم الخطأ 400 Bad Request.
إذا كان إثبات DPoP يتضمّن مطالبات htm أو htu غير متطابقة، أو iat منتهي الصلاحية، أو jti مُعاد استخدامه، أو توقيع غير صالح، ستعرض Google رمز الخطأ invalid_dpop_proof.
إذا كان رمز nonce لبروتوكول DPoP مطلوبًا، مثلاً أثناء تبادل الرمز المميز لإعادة التحميل، وكان إثبات DPoP
لا يتضمّن مطالبة nonce، أو كانت قيمة nonce غير مقبولة للخادم (على سبيل المثال،
انتهت صلاحيتها أو تم استخدامها من قبل أو غير صحيحة)، تعرض Google رمز الخطأ use_dpop_nonce
مع عنوان HTTP DPoP-Nonce يحتوي على رمز nonce جديد يمكنك
استخدامه في طلب لاحق.
قد تؤدي حالات الفشل الأخرى إلى عرض invalid_grant.
تستجيب Google لهذا الطلب من خلال عرض عنصر JSON يحتوي على رمز مميز للوصول قصير الأجل ورمز مميز لإعادة التحميل.
يحتوي الردّ على الحقول التالية:
| الحقول | |
|---|---|
access_token |
الرمز المميّز الذي يرسله تطبيقك للسماح بطلب بيانات من واجهة برمجة تطبيقات Google. |
expires_in |
المدة المتبقية لرمز الدخول بالثواني |
id_token |
ملاحظة: لا يتم عرض هذه السمة إلا إذا كان طلبك يتضمّن نطاق هوية، مثل openid أو profile أو email. القيمة هي رمز ويب مميّز بتنسيق JSON (JWT) يحتوي على معلومات هوية موقَّعة رقميًا عن المستخدم. |
refresh_token |
رمز مميّز يمكنك استخدامه للحصول على رمز دخول جديد تظل الرموز المميزة لإعادة التحميل صالحة إلى أن يلغي المستخدم إذن الوصول أو تنتهي صلاحية الرمز المميز لإعادة التحميل. في حال استخدام DPoP، يتم ربط الرمز المميز لإعادة التحميل بالمفتاح الخاص المستخدَم لتوقيع إثبات DPoP. يُرجى العِلم أنّه يتم دائمًا عرض الرموز المميزة لإعادة التحميل للتطبيقات المثبَّتة. |
refresh_token_expires_in |
المدة المتبقية لصلاحية الرمز المميز لإعادة التحميل بالثواني لا يتم ضبط هذه القيمة إلا عندما يمنح المستخدم إذن الوصول المستنِد إلى الوقت. |
scope |
نطاقات الوصول التي يمنحها access_token، ويتم التعبير عنها كقائمة من السلاسل الحسّاسة لحالة الأحرف والمفصولة بمسافات. |
token_type |
نوع الرمز المميّز الذي تم عرضه تكون هذه القيمة دائمًا Bearer، حتى عند استخدام DPoP. |
يعرض المقتطف التالي نموذجًا لعناوين الاستجابة والنص الأساسي الناجحَين عند استخدام DPoP:
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
DPoP-Nonce: AN3XwJjZsjnb0ZuWkRlek8QU7wY-Zhf-5IP6tO0tORz0KgtDT1Bo8FX-w4nz3r5lnepI
{
"access_token": "1/fFAGRNJru1FTz70BzhT3Zg",
"expires_in": 3920,
"token_type": "Bearer",
"scope": "https://www.googleapis.com/auth/drive.metadata.readonly https://www.googleapis.com/auth/calendar.readonly",
"refresh_token": "1//xEoDL4iW3cxlI7yDbSRFYNG01kVKM2C-259HOF2aQbI"
}الخطوة 6: التحقّق من النطاقات التي منحها المستخدمون
عند طلب أذونات (نطاقات) متعددة، قد لا يمنح المستخدمون تطبيقك إذن الوصول إليها جميعًا. يجب أن يتحقّق تطبيقك من النطاقات التي تم منحها فعليًا وأن يتعامل بسلاسة مع الحالات التي يتم فيها رفض بعض الأذونات، وذلك عادةً من خلال إيقاف الميزات التي تعتمد على تلك النطاقات المرفوضة.
ولكن هناك استثناءات في هذا الصدد. تتجاوز تطبيقات Google Workspace Enterprise التي تتضمّن تفويضًا على مستوى النطاق، أو التطبيقات التي تم وضع علامة عليها على أنّها موثوق بها، شاشة طلب الموافقة على الأذونات الدقيقة. بالنسبة إلى هذه التطبيقات، لن تظهر للمستخدمين شاشة طلب الموافقة على الأذونات الدقيقة. بدلاً من ذلك، سيتلقّى تطبيقك إما جميع النطاقات المطلوبة أو لن يتلقّى أيًا منها.
لمزيد من المعلومات التفصيلية، يُرجى الاطّلاع على كيفية التعامل مع الأذونات الدقيقة.
للتحقّق مما إذا كان المستخدم قد منح تطبيقك إذن الوصول إلى نطاق معيّن،
افحص الحقل scope في استجابة رمز الدخول. نطاقات الوصول التي يمنحها رمز الدخول، ويتم التعبير عنها كقائمة من السلاسل الحسّاسة لحالة الأحرف والمفصولة بمسافات.
على سبيل المثال، يشير نموذج استجابة رمز الدخول التالي إلى أنّ المستخدم قد منح تطبيقك إذن الوصول إلى نشاط Drive للقراءة فقط وأذونات أحداث "تقويم Google":
{ "access_token": "1/fFAGRNJru1FTz70BzhT3Zg", "expires_in": 3920, "token_type": "Bearer", "scope": "https://www.googleapis.com/auth/drive.metadata.readonly https://www.googleapis.com/auth/calendar.readonly", "refresh_token": "1//xEoDL4iW3cxlI7yDbSRFYNG01kVKM2C-259HOF2aQbI" }
استدعاء Google APIs
بعد حصول تطبيقك على رمز مميّز للوصول، يمكنك استخدام الرمز لإجراء طلبات إلى واجهة برمجة تطبيقات Google نيابةً عن حساب مستخدم معيّن إذا تم منح نطاقات الوصول التي تتطلّبها واجهة برمجة التطبيقات. لإجراء ذلك، يجب تضمين رمز الدخول في طلب موجّه إلى واجهة برمجة التطبيقات من خلال تضمين إما مَعلمة طلب البحث access_token أو قيمة عنوان HTTP Authorization Bearer. ويُفضَّل استخدام عنوان HTTP كلما أمكن ذلك، لأنّ سلاسل طلبات البحث تكون عادةً مرئية في سجلّات الخادم. في معظم الحالات، يمكنك استخدام مكتبة برامج لإعداد طلباتك إلى Google APIs (على سبيل المثال، عند طلب واجهة برمجة التطبيقات Drive Files API).
يمكنك تجربة جميع واجهات Google APIs والاطّلاع على نطاقاتها في مساحة بروتوكول OAuth 2.0.
أمثلة على طلبات HTTP GET
قد يبدو طلب البيانات من نقطة النهاية
drive.files (واجهة Drive Files API) باستخدام عنوان HTTP Authorization: Bearer على النحو التالي. يُرجى العِلم أنّه عليك تحديد رمز الدخول الخاص بك:
GET /drive/v2/files HTTP/1.1 Host: www.googleapis.com Authorization: Bearer access_token
في ما يلي طلب إلى واجهة برمجة التطبيقات نفسها للمستخدم الذي تمت مصادقته باستخدام مَعلمة سلسلة طلب البحث access_token:
GET https://www.googleapis.com/drive/v2/files?access_token=access_token
أمثلة على curl
يمكنك اختبار هذه الأوامر باستخدام تطبيق سطر الأوامر curl. في ما يلي مثال يستخدم خيار عنوان HTTP (المفضّل):
curl -H "Authorization: Bearer access_token" https://www.googleapis.com/drive/v2/files
أو يمكنك بدلاً من ذلك استخدام خيار مَعلمة سلسلة طلب البحث:
curl https://www.googleapis.com/drive/v2/files?access_token=access_token
إعادة تحميل رمز الدخول
تنتهي صلاحية رموز الدخول بشكل دوري وتصبح بيانات اعتماد غير صالحة لطلب بيانات من واجهة برمجة التطبيقات ذي الصلة. يمكنك إعادة تحميل رمز الدخول بدون طلب الإذن من المستخدم (بما في ذلك عندما لا يكون المستخدم حاضرًا) إذا طلبت الوصول بلا إنترنت إلى النطاقات المرتبطة بالرمز المميز.
لتحديث رمز الدخول، يرسل تطبيقك طلب HTTPS POST إلى خادم التفويض في Google (https://oauth2.googleapis.com/token) يتضمّن المَعلمات التالية في نص الطلب:
| الاسم | القيمة |
|---|---|
client_id |
معرِّف العميل الذي تم الحصول عليه من وحدة تحكّم واجهة برمجة التطبيقات |
client_secret |
اختياريّ
سر العميل الذي تم الحصول عليه من وحدة تحكّم واجهة برمجة التطبيقات
(لا ينطبق |
grant_type |
كما هو محدّد في مواصفات OAuth 2.0، يجب ضبط قيمة هذا الحقل على refresh_token. |
refresh_token |
الرمز المميز لإعادة التحميل الذي تم إرجاعه من تبادل رمز التفويض |
على الرغم من أنّ استخدام DPoP اختياري، ننصح به لتعزيز الأمان. لاستخدام DPoP مع رمز مميز لإعادة التحميل، يجب أن ينشئ تطبيقك رمز JWT جديدًا وفريدًا لإثبات DPoP لكل طلب إلى نقطة نهاية الرمز المميز. يجب توقيع هذا الإثبات باستخدام المفتاح الخاص نفسه الذي تم استخدامه أثناء عملية تبادل رمز التفويض الأولية. يضيف تطبيقك الإثبات كعنوان طلب HTTP.
| العنوان | مطلوب | الوصف |
|---|---|---|
DPoP |
اختياري | إثبات DPoP هو رمز JWT يثبت
حيازة مفتاح خاص. هذا عنوان وليس مَعلمة. وفي حال توفيره، يتم ربط الرموز المميّزة التي تم عرضها بهذا المفتاح. يجب إنشاء إثبات جديد وفريد لكل طلب، ويجب أن يتضمّن المطالبتَين htm (طريقة HTTP) وhtu (معرّف الموارد المنتظم لبروتوكول HTTP) اللتين تتطابقان مع الطلب. |
يعرض المقتطف التالي نموذجًا لطلب:
POST /token HTTP/1.1 Host: oauth2.googleapis.com Content-Type: application/x-www-form-urlencoded DPoP: DPOP_PROOF_JWT client_id=your_client_id& refresh_token=refresh_token& grant_type=refresh_token
لاستخدام DPoP مع رمز مميّز لإعادة التحميل، يجب إنشاء رمز JWT جديد وفريد لإثبات DPoP للطلب. راجِع إنشاء إثبات DPoP للحصول على تعليمات مفصّلة حول إنشاء مفتاحَي التشفير وإنشاء رمز JWT.
تتم الإشارة إلى عملية التبادل الناجحة من خلال استجابة 200 OK
تحتوي على رمز دخول جديد. عند استخدام DPoP،
يكون token_type هو Bearer. ويؤكّد الردّ الناجح قبول إثبات DPoP للرمز المميّز لإعادة التحميل. قد تعرض Google أيضًا عنوان HTTP جديدًا باسم DPoP-Nonce في الاستجابة. وفي حال عرضه، يجب أن يخزّن العميل هذا الرقم الخاص مؤقتًا ويضمّنه في مطالبة nonce لإثبات DPoP في الطلبات اللاحقة.
يحدث فشل في التبادل إذا كان العنوان DPoP غير متوفّر أو غير صالح أو يستخدم مفتاحًا غير صحيح. للحصول على تفاصيل حول رموز خطأ DPoP المحدّدة ومعالجة الأرقام المستخدمة لمرة واحدة، يُرجى الاطّلاع على تعذُّر التبادل.
يعرض المقتطف التالي نموذجًا لعناوين الاستجابة والنص الأساسي الناجحَين عند استخدام DPoP:
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
DPoP-Nonce: AN3XwJjZsjnb0ZuWkRlek8QU7wY-Zhf-5IP6tO0tORz0KgtDT1Bo8FX-w4nz3r5lnepI
{
"access_token": "1/fFAGRNJru1FTz70BzhT3Zg",
"expires_in": 3920,
"scope": "https://www.googleapis.com/auth/drive.metadata.readonly https://www.googleapis.com/auth/calendar.readonly",
"token_type": "Bearer"
}يُرجى العِلم أنّ هناك حدودًا لعدد الرموز المميزة لإعادة التحميل التي سيتم إصدارها، حدّ واحد لكل مجموعة من العميل والمستخدم، وحدّ آخر لكل مستخدم في جميع العملاء. يجب حفظ الرموز المميزة لإعادة التحميل في مساحة تخزين طويلة الأمد ومواصلة استخدامها طالما أنّها صالحة. إذا طلب تطبيقك عددًا كبيرًا جدًا من الرموز المميزة لإعادة التحميل، قد يتجاوز هذه الحدود، وفي هذه الحالة ستتوقف الرموز المميزة لإعادة التحميل القديمة عن العمل.
إبطال الرمز المميّز
في بعض الحالات، قد يرغب المستخدم في إبطال إذن الوصول الممنوح لتطبيق معيّن. ويمكن للمستخدم إبطال إذن الوصول من خلال الانتقال إلى إعدادات الحساب. لمزيد من المعلومات، يُرجى الاطّلاع على قسم إزالة إمكانية وصول الموقع الإلكتروني أو التطبيق في مستند الدعم المواقع الإلكترونية والتطبيقات التابعة لجهات خارجية التي يمكنها الوصول إلى حسابك.
ويمكن أيضًا لأحد التطبيقات إلغاء إذن الوصول الممنوح له آليًا. يُعدّ الإبطال الآلي مهمًا في الحالات التي يلغي فيها المستخدم اشتراكه أو يزيل تطبيقًا أو عندما تتغيّر موارد واجهة برمجة التطبيقات التي يتطلّبها التطبيق بشكل كبير. بعبارة أخرى، يمكن أن يتضمّن جزء من عملية الإزالة طلب بيانات من واجهة برمجة التطبيقات لضمان إزالة الأذونات التي تم منحها للتطبيق في السابق.
لإبطال رمز مميّز آليًا، يرسل تطبيقك طلبًا إلى https://oauth2.googleapis.com/revoke ويتضمّن الرمز المميّز كمَعلمة:
curl -d -X -POST --header "Content-type:application/x-www-form-urlencoded" \
https://oauth2.googleapis.com/revoke?token={token}يمكن أن يكون الرمز المميز رمز دخول أو رمزًا مميزًا لإعادة التحميل. إذا كان الرمز المميز هو رمز دخول وكان لديه رمز مميز لإعادة التحميل، سيتم أيضًا إبطال الرمز المميز لإعادة التحميل.
إذا تمت معالجة الإبطال بنجاح، يكون رمز حالة HTTP للاستجابة هو
200. في حالات الخطأ، يتم عرض رمز حالة HTTP 400 مع رمز خطأ.
طُرق إعادة التوجيه إلى التطبيق
مخطّط URI مخصّص
مخطّطات URI المخصّصة هي شكل من أشكال الربط بصفحة معيّنة تستخدم مخطّطًا مخصّصًا لفتح تطبيقك.
بديل لاستخدام مخطّطات URI المخصّصة في تطبيقات Chrome
استخدِم Chrome Identity API التي توفّر استجابة OAuth 2.0 مباشرةً لتطبيقك، ما يلغي الحاجة إلى معرّف موارد منتظم (URI) لإعادة التوجيه.
عنوان IP للاسترجاع (على أجهزة الكمبيوتر المكتبي التي تعمل بنظام التشغيل macOS وLinux وWindows)
لتلقّي رمز التفويض باستخدام عنوان URL هذا، يجب أن يكون تطبيقك يستمع إلى خادم الويب المحلي. يمكنك إجراء ذلك على العديد من المنصات، ولكن ليس كلها. ومع ذلك، إذا كانت منصتك تتيح استخدام هذه الآلية، ننصحك باستخدامها للحصول على رمز التفويض.
عندما يتلقّى تطبيقك ردّ التفويض، يجب أن يستجيب من خلال عرض صفحة HTML تطلب من المستخدم إغلاق المتصفّح والعودة إلى تطبيقك، وذلك لضمان أفضل سهولة استخدام.
| الاستخدام المقترَح | تطبيقات متوافقة مع أجهزة الكمبيوتر المكتبي التي تعمل بأنظمة التشغيل macOS وLinux وWindows |
| قيم النماذج | اضبط نوع التطبيق على تطبيق متوافق مع الكمبيوتر المكتبي. |
النسخ واللصق اليدوي (متوقّف نهائيًا)
حماية تطبيقاتك
إثبات ملكية التطبيق في Chrome
يمكنك إثبات ملكية تطبيقك للحدّ من خطر انتحال هويته.
لإكمال عملية التحقّق، عليك استخدام حساب المطوّر على "سوق Chrome الإلكتروني". يجب استيفاء المتطلبات التالية لإكمال عملية التحقّق بنجاح:
- يجب أن يكون لديك سلعة مسجَّلة في لوحة بيانات المطوِّر في سوق Chrome الإلكتروني تحمل معرّف السلعة نفسه الخاص بعميل OAuth لإضافة Chrome الذي تُكمل عملية إثبات الهوية له.
- يجب أن تكون ناشرًا للعنصر في "سوق Chrome الإلكتروني". مزيد من المعلومات حول إدارة إمكانية الوصول في "لوحة بيانات المطوِّر في سوق Chrome الإلكتروني"
في قسم إثبات ملكية التطبيق في برنامج إضافة Chrome، انقر على الزر إثبات الملكية لإكمال عملية إثبات الملكية.
ملاحظة: يُرجى الانتظار بضع دقائق قبل إكمال عملية التحقّق من المعلنين بعد منح إذن الوصول إلى حسابك.
إذا نجحت عملية التحقّق، سيظهر إشعار لتأكيد نجاحها. وإلا، سيظهر لك طلب خطأ.
لحلّ مشكلة تعذُّر إثبات الهوية، جرِّب ما يلي:
- تأكَّد من وجود سلعة مسجَّلة في لوحة بيانات المطوِّر في "سوق Chrome الإلكتروني" يحمل معرّف السلعة نفسه لعميل OAuth لإضافة Chrome الذي تُكمل عملية التحقّق له.
- تأكَّد من أنّك ناشر للتطبيق، أي أنّك إما الناشر الفردي للتطبيق أو عضو في مجموعة الناشرين للتطبيق. مزيد من المعلومات حول إدارة إمكانية الوصول في لوحة بيانات المطوِّر في سوق Chrome الإلكتروني.
- إذا عدّلت للتو قائمة الناشرين في المجموعة، تأكَّد من مزامنة قائمة أعضاء الناشرين في المجموعة في "لوحة بيانات المطوِّر في سوق Chrome الإلكتروني". مزيد من المعلومات حول مزامنة قائمة الأعضاء في قناة الناشر
ميزة "فحص التطبيقات" (على أجهزة iOS فقط)
تساعد ميزة فحص التطبيقات في حماية تطبيقات iOS من الاستخدام غير المصرَّح به من خلال استخدام خدمة App Attest من Apple للتحقّق من أنّ الطلبات المقدَّمة إلى نقاط نهاية Google OAuth 2.0 واردة من تطبيقاتك الأصلية. يساعد ذلك في تقليل خطر انتحال هوية التطبيق.
تفعيل ميزة "فحص التطبيقات" لعميل iOS
يجب استيفاء المتطلبات التالية لتفعيل ميزة "فحص التطبيقات" بنجاح لعميل iOS:- يجب تحديد معرّف فريق لعميل iOS.
- يجب عدم استخدام حرف بدل في معرّف الحزمة لأنّه يمكن أن يؤدي إلى أكثر من تطبيق واحد، ما يعني أنّ معرّف الحزمة يجب ألا يتضمّن رمز النجمة (*).
بعد تفعيل ميزة "فحص التطبيقات"، ستبدأ في رؤية المقاييس ذات الصلة بطلبات OAuth من عميلك في عرض التعديل لعميل OAuth. لن يتم حظر الطلبات الواردة من مصادر لم يتم التحقّق منها إلى أن يتم فرض ميزة "فحص التطبيقات". يمكن أن تساعدك المعلومات الواردة في صفحة مراقبة المقاييس في تحديد وقت بدء إجراءات التنفيذ.
قد تظهر لك أخطاء متعلّقة بميزة "فحص التطبيقات" عند تفعيلها لتطبيق iOS. لإصلاح هذه الأخطاء، جرِّب ما يلي:
- تأكَّد من أنّ معرّف الحزمة ومعرّف الفريق اللذين حدّدتهما صالحان.
- تأكَّد من عدم استخدام حرف بدل لمعرّف الحزمة.
فرض ميزة "فحص التطبيقات" لعميل iOS
لا يؤدي تفعيل ميزة "فحص التطبيقات" في تطبيقك إلى حظر الطلبات غير المعروفة تلقائيًا. لتطبيق هذه الحماية، انتقِل إلى عرض التعديل لعميل iOS. ستظهر لك مقاييس "فحص التطبيقات" على يسار الصفحة ضمن قسم Google Identity لنظام التشغيل iOS. تتضمّن المقاييس المعلومات التالية:- عدد الطلبات التي تم التحقّق منها: الطلبات التي تحتوي على رمز مميّز صالح لميزة "فحص التطبيقات". بعد تفعيل إجراءات تنفيذ "فحص التطبيقات"، لن تنجح سوى الطلبات في هذه الفئة.
- عدد الطلبات التي لم يتم التحقّق منها: طلبات العميل التي يُحتمل أن تكون قديمة: الطلبات التي لا تتضمّن رمزًا مميزًا لميزة "فحص التطبيقات". قد تكون هذه الطلبات من إصدار قديم من تطبيقك لا يتضمّن تنفيذ ميزة "فحص التطبيقات".
- عدد الطلبات التي لم يتم التحقّق منها: طلبات من مصدر غير معروف: الطلبات التي لا تتضمّن رمزًا مميزًا لميزة "فحص التطبيقات" ولا يبدو أنّها واردة من تطبيقك.
- عدد الطلبات التي لم يتم التحقّق منها: الطلبات غير الصالحة: الطلبات التي تحتوي على رمز مميّز غير صالح لميزة "فحص التطبيقات"، وقد تكون من عميل غير موثوق يحاول انتحال هوية تطبيقك أو من بيئات محاكاة.
لفرض ميزة "فحص التطبيقات"، انقر على الزر ENFORCE وأكِّد اختيارك. بعد تفعيل إجراء التنفيذ، سيتم رفض جميع الطلبات غير المتحقّق منها من برنامج العميل.
ملاحظة: بعد تفعيل إجراء التنفيذ، قد يستغرق تطبيق التغييرات مدة تصل إلى 15 دقيقة.
إلغاء فرض ميزة "فحص التطبيقات" لعميل iOS
سيؤدي إلغاء فرض ميزة "التحقّق من التطبيق" في تطبيقك إلى إيقاف فرض الميزة وسيسمح بجميع الطلبات الواردة من العميل إلى نقاط نهاية Google OAuth 2.0، بما في ذلك الطلبات التي لم يتم التحقّق منها.
لإلغاء فرض ميزة "فحص التطبيقات" لعميل iOS، انتقِل إلى عرض التعديل لعميل iOS وانقر على الزر إلغاء الفرض وأكِّد اختيارك.
ملاحظة: بعد إلغاء فرض ميزة "فحص التطبيقات"، قد يستغرق تطبيق التغييرات ما يصل إلى 15 دقيقة.
إيقاف ميزة "فحص التطبيقات" لعميل iOS
سيؤدي إيقاف ميزة "فحص التطبيقات" في تطبيقك إلى إيقاف جميع عمليات المراقبة والتنفيذ التي تجريها الميزة. ننصحك بإلغاء فرض ميزة "فحص التطبيقات" حتى تتمكّن من مواصلة تتبُّع المقاييس لعميلك.
لإيقاف ميزة "فحص التطبيقات" لعميل iOS، انتقِل إلى عرض التعديل لعميل iOS وأوقِف زر الإيقاف/التفعيل حماية عميل OAuth من إساءة الاستخدام باستخدام ميزة "فحص التطبيقات من Firebase".
ملاحظة: بعد إيقاف ميزة "فحص التطبيقات"، قد يستغرق تطبيق التغييرات مدة تصل إلى 15 دقيقة.
الوصول المستند إلى الوقت
يسمح الوصول المستنِد إلى الوقت للمستخدم بمنح تطبيقك إذن الوصول إلى بياناته لفترة محدودة لإكمال إجراء معيّن. تتوفّر إمكانية الوصول المستندة إلى الوقت في منتجات Google محدّدة أثناء عملية الموافقة، ما يمنح المستخدمين خيار منح إذن الوصول لفترة زمنية محدودة. على سبيل المثال، تتيح واجهة برمجة التطبيقات لنقل البيانات نقل البيانات لمرة واحدة.
عندما يمنح أحد المستخدمين تطبيقك إذن الوصول المستند إلى الوقت، ستنتهي صلاحية الرمز المميز لإعادة التحميل بعد
المدة المحدّدة. يُرجى العِلم أنّه قد يتم إبطال الرموز المميزة لإعادة التحميل في وقت سابق في ظل ظروف معيّنة. يُرجى الاطّلاع على هذه الحالات لمعرفة التفاصيل. يمثّل الحقل refresh_token_expires_in الذي يتم عرضه في ردّ تبادل رمز التفويض الوقت المتبقي حتى انتهاء صلاحية الرمز المميز لإعادة التحميل في هذه الحالات.
محتوى إضافي للقراءة
يحدّد معيار "أفضل الممارسات الحالية" (BCP) الصادر عن "فريق مهام هندسة الإنترنت" (IETF) بشأن OAuth 2.0 للتطبيقات الأصلية العديد من أفضل الممارسات الموضّحة هنا.
تنفيذ ميزة "الحماية العابرة للحساب"
من الخطوات الإضافية التي يجب اتّخاذها لحماية حسابات المستخدمين تنفيذ ميزة "الحماية العابرة للحساب" من خلال الاستفادة من خدمة "الحماية العابرة للحساب" من Google. تتيح لك هذه الخدمة الاشتراك في إشعارات أحداث الأمان التي توفّر معلومات لتطبيقك حول التغييرات الرئيسية في حساب المستخدم. ويمكنك بعد ذلك استخدام المعلومات لاتخاذ الإجراءات بناءً على طريقة استجابتك للأحداث.
في ما يلي بعض الأمثلة على أنواع الأحداث التي ترسلها خدمة "الحماية العابرة للحساب" من Google إلى تطبيقك:
-
https://schemas.openid.net/secevent/risc/event-type/sessions-revoked -
https://schemas.openid.net/secevent/oauth/event-type/token-revoked -
https://schemas.openid.net/secevent/risc/event-type/account-disabled
يمكنك الاطّلاع على صفحة حماية حسابات المستخدمين من خلال ميزة "الحماية العابرة للحساب" لمزيد من المعلومات حول كيفية تنفيذ ميزة "الحماية العابرة للحساب" والاطّلاع على القائمة الكاملة للأحداث المتاحة.