OAuth 2.0 للتطبيقات المتوافقة مع الأجهزة الجوّالة وأجهزة الكمبيوتر المكتبي

ملاحظة \n أو

يشرح هذا المستند كيف تستخدم التطبيقات المثبّتة على الأجهزة، مثل الهواتف والأجهزة اللوحية وأجهزة الكمبيوتر، نقاط نهاية OAuth 2.0 من Google للسماح بالوصول إلى YouTube Data API.

يتيح بروتوكول OAuth 2.0 للمستخدمين مشاركة بيانات محدّدة مع أحد التطبيقات مع الحفاظ على خصوصية أسماء المستخدمين وكلمات المرور والمعلومات الأخرى. على سبيل المثال، يمكن لتطبيق استخدام OAuth 2.0 للحصول على إذن باسترداد بيانات قناة على YouTube.

يتم توزيع التطبيقات المثبَّتة على أجهزة فردية، ومن المفترض أنّ هذه التطبيقات لا يمكنها الحفاظ على السرية. ويمكنهم الوصول إلى واجهات Google APIs أثناء استخدام التطبيق أو تشغيله في الخلفية.

يشبه مسار التفويض هذا المسار المستخدَم في تطبيقات خادم الويب. ويتمثّل الاختلاف الرئيسي في أنّ التطبيقات المثبّتة يجب أن تفتح متصفّح النظام وتقدّم معرّف موارد منتظم (URI) محلي لإعادة التوجيه لمعالجة الاستجابات من خادم أذونات Google.

البدائل

بالنسبة إلى تطبيقات الأجهزة الجوّالة، قد تفضّل استخدام تسجيل الدخول بحساب Google على أجهزة Android أو iOS. تتعامل مكتبات برامج "تسجيل الدخول بحساب Google" مع المصادقة وتفويض المستخدم، وقد يكون تنفيذها أسهل من البروتوكول الأدنى الموضّح هنا.

بالنسبة إلى التطبيقات التي تعمل على أجهزة لا تتيح استخدام متصفّح النظام أو التي لها إمكانات إدخال محدودة، مثل أجهزة التلفزيون أو وحدات تحكّم الألعاب أو الكاميرات أو الطابعات، يُرجى الاطّلاع على بروتوكول OAuth 2.0 لأجهزة التلفزيون والأجهزة أو تسجيل الدخول على أجهزة التلفزيون وأجهزة الإدخال المحدودة.

المكتبات والنماذج

ننصحك باستخدام المكتبات والنماذج التالية لمساعدتك في تنفيذ مسار OAuth 2.0 الموضّح في هذا المستند:

المتطلّبات الأساسية

تمكين واجهات برمجة التطبيقات لمشروعك

على أي تطبيق يستدعي واجهات Google APIs تفعيل واجهات برمجة التطبيقات هذه في API Console.

لتفعيل واجهة برمجة تطبيقات لمشروعك:

  1. Open the API Library في Google API Console.
  2. If prompted, select a project, or create a new one.
  3. استخدِم صفحة "المكتبة" للعثور على YouTube Data API وتفعيلها. ابحث عن أي واجهات برمجة تطبيقات أخرى سيستخدمها تطبيقك وفعّلها أيضًا.

إنشاء بيانات اعتماد التفويض

يجب أن يكون لدى أي تطبيق يستخدم OAuth 2.0 للوصول إلى واجهات Google APIs بيانات اعتماد تفويض تحدِّد التطبيق إلى خادم OAuth 2.0 من Google. توضّح الخطوات التالية كيفية إنشاء بيانات اعتماد لمشروعك. ويمكن لتطبيقاتك بعد ذلك استخدام بيانات الاعتماد للوصول إلى واجهات برمجة التطبيقات التي فعّلتها لهذا المشروع.

  1. Go to the Credentials page.
  2. انقر على إنشاء بيانات الاعتماد > معرِّف عميل OAuth.
  3. تصف الأقسام أدناه أنواع البرامج وطُرق إعادة التوجيه التي يتيحها خادم تفويض Google. اختَر نوع العميل المقترَح لتطبيقك وأدخِل اسمًا لعميل OAuth، ثم اضبط الحقول الأخرى في النموذج على النحو المناسب.
Android
  1. اختَر نوع تطبيق Android.
  2. أدخِل اسمًا لعميل OAuth. يتم عرض هذا الاسم على Credentials page الخاص بمشروعك لتعريف العميل.
  3. أدخِل اسم حزمة تطبيق Android. يتم تحديد هذه القيمة في السمة package للعنصر <manifest> ضمن ملف بيان التطبيق.
  4. أدخِل الملف المرجعي لشهادة توقيع SHA-1 لتوزيع التطبيق.
    • إذا كان تطبيقك يستخدم ميزة "توقيع التطبيق" من Google Play، انسخ الملف المرجعي لخوارزمية SHA-1 من صفحة توقيع التطبيق في Play Console.
    • إذا كنت تدير ملف تخزين المفاتيح ومفاتيح التوقيع الخاصة بك، استخدِم الأداة keytool المضمّنة مع Java لطباعة معلومات الشهادة بتنسيق يمكن للمستخدمين قراءته. انسخ القيمة SHA1 في القسم Certificate fingerprints من الناتج keytool. للحصول على مزيد من المعلومات، يمكنك الاطّلاع على مصادقة العميل في مستندات Google APIs لنظام التشغيل Android.
  5. (اختياري) أثبِت ملكية تطبيق Android.
  6. انقر على إنشاء.
iOS
  1. اختَر نوع تطبيق iOS.
  2. أدخِل اسمًا لعميل OAuth. يتم عرض هذا الاسم على Credentials page الخاص بمشروعك لتعريف العميل.
  3. أدخِل معرِّف الحزمة الخاص بتطبيقك. رقم تعريف الحزمة هو قيمة مفتاح CFBundleIdentifier في ملف الموارد لقائمة سمات المعلومات لتطبيقك (info.plist). ويتم عرض القيمة بشكل أكثر شيوعًا في الجزء "عام" أو جزء "التوقيع والإمكانات" في محرِّر مشروع Xcode. يتم عرض رقم تعريف الحِزمة أيضًا في قسم "المعلومات العامة" في صفحة "معلومات التطبيق" الخاصة بالتطبيق على موقع App Store Connect الإلكتروني من Apple.
  4. (سؤال اختياري)

    أدخِل رقم تعريف تطبيقك على App Store إذا تم نشر التطبيق في App Store من Apple. رقم تعريف المتجر هو سلسلة رقمية مضمّنة في عنوان URL لكل متجر من Apple App Store.

    1. افتح تطبيق Apple App Store على جهاز iOS أو iPadOS.
    2. ابحث عن تطبيقك.
    3. حدد زر "Share" (مشاركة) (مربع ورمز سهم لأعلى).
    4. اختَر نسخ الرابط.
    5. الصق الرابط في محرِّر نصوص. رقم تعريف App Store هو الجزء الأخير من عنوان URL.

      مثلاً: https://apps.apple.com/app/google/id284815942

  5. (سؤال اختياري)

    أدخِل رقم تعريف الفريق. للحصول على مزيد من المعلومات، راجِع تحديد مكان رقم تعريف الفريق في مستندات حساب المطوّر على Apple.

  6. انقر على إنشاء.
النطاق الفائق العرض (UWP)
  1. اختَر نوع تطبيق Universal Windows Platform.
  2. أدخِل اسمًا لعميل OAuth. يتم عرض هذا الاسم على Credentials page الخاص بمشروعك لتعريف العميل.
  3. أدخِل رقم تعريف تطبيقك المؤلّف من 12 حرفًا على Microsoft Store. يمكنك العثور على هذه القيمة في مركز شركاء Microsoft في صفحة هوية التطبيق في قسم "إدارة التطبيق".
  4. انقر على إنشاء.

بالنسبة إلى تطبيقات UWP، لا يمكن أن يزيد طول مخطط URI المخصَّص عن 39 حرفًا.

مخطط معرِّف الموارد المنتظم (URI) المخصّص (Android وiOS وUWP)

مخططات معرف الموارد المنتظم (URI) المخصصة هي شكل من أشكال الروابط لمواضع معيّنة التي تستخدم مخططًا محددًا مخصصًا لفتح تطبيقك.

بديل لاستخدام مخططات معرّفات الموارد المنتظمة (URI) المخصصة على Android

واستخدِم حزمة تطوير البرامج (SDK) الخاصة بتسجيل الدخول بحساب Google لنظام التشغيل Android التي توفّر استجابة OAuth 2.0 للتطبيق مباشرةً، ما يلغي الحاجة إلى استخدام معرّف موارد منتظم (URI) لإعادة التوجيه.

كيفية نقل البيانات إلى حزمة تطوير البرامج (SDK) الخاصة بميزة "تسجيل الدخول بحساب Google" لنظام التشغيل Android

إذا كنت تستخدم حاليًا مخططًا مخصّصًا لدمج OAuth على Android، عليك إكمال الإجراءات التالية للانتقال بشكل كامل إلى استخدام ميزة "تسجيل الدخول بحساب Google" لحزمة تطوير البرامج (SDK) المقترَحة لنظام التشغيل Android:

  1. عدِّل الرمز الخاص بك لاستخدام حزمة تطوير البرامج (SDK) الخاصة بتسجيل الدخول بحساب Google.
  2. إيقاف دعم المخطط المخصص في وحدة التحكم في واجهة Google API.

اتّبِع الخطوات التالية لنقل البيانات إلى حزمة تطوير البرامج (SDK) الخاصة بميزة "تسجيل الدخول بحساب Google" على أجهزة Android:

  1. عدِّل الرمز الخاص بك لاستخدام حزمة تطوير البرامج (SDK) الخاصة بميزة "تسجيل الدخول بحساب Google" على أجهزة Android:
    1. تحقَّق من الرمز البرمجي لمعرفة مكان إرسال طلب إلى خادم OAuth 2.0 في Google، وإذا كنت تستخدم مخططًا مخصّصًا، سيظهر طلبك على النحو التالي:
        https://accounts.google.com/o/oauth2/v2/auth?
        scope=<SCOPES>&
        response_type=code&
        &state=<STATE>&
        redirect_uri=com.example.app:/oauth2redirect&
        client_id=<CLIENT_ID>
        
      com.example.app:/oauth2redirect هو معرّف الموارد المنتظم (URI) لإعادة توجيه المخطط المخصّص في المثال أعلاه. اطّلِع على تعريف المَعلمة redirect_uri للحصول على مزيد من التفاصيل حول تنسيق قيمة مخطط معرّف الموارد المنتظم (URI) المخصّص.
    2. دوِّن مَعلمتَي الطلب scope وclient_id اللتين تحتاج إليهما لضبط حزمة تطوير البرامج (SDK) لتسجيل الدخول بحساب Google.
    3. اتّبِع تعليمات بدء دمج "تسجيل الدخول باستخدام حساب Google" في تطبيق Android لإعداد حزمة تطوير البرامج (SDK). يمكنك تخطّي خطوة الحصول على معرِّف عميل OAuth 2.0 لخادم الخلفية عند إعادة استخدام client_id الذي تم استرداده من الخطوة السابقة.
    4. اتّبِع تعليمات تفعيل الوصول إلى واجهة برمجة التطبيقات من جهة الخادم. ويتضمّن ذلك الخطوات التالية:
      1. استخدِم طريقة getServerAuthCode لاسترداد رمز المصادقة للنطاقات التي تطلب إذنًا لها.
      2. أرسِل رمز المصادقة إلى الخلفية في تطبيقك لاستبداله برمز الدخول وإعادة التحميل.
      3. يمكنك استخدام رمز الدخول الذي تم استرداده لإجراء اتصالات بـ Google APIs نيابةً عن المستخدم.
  2. إيقاف دعم المخطّط المخصّص في وحدة تحكّم Google API:
    1. انتقِل إلى قائمة بيانات اعتماد OAuth 2.0 واختَر برنامج Android.
    2. انتقل إلى قسم الإعدادات المتقدمة، وأزِل العلامة من مربع الاختيار تفعيل مخطط URI المخصّص، وانقر على حفظ لإيقاف دعم مخطَّط URI المخصّص.
تمكين مخطط URI المخصص
إذا لم يعمل البديل المُقترَح لديك، يمكنك تفعيل مخطّطات الموارد المنتظمة (URI) المخصّصة لبرنامج Android من خلال اتّباع التعليمات التالية:
  1. انتقِل إلى قائمة بيانات اعتماد OAuth 2.0 واختَر برنامج Android.
  2. انتقل إلى قسم الإعدادات المتقدمة، وضَع علامة في مربّع الاختيار تفعيل مخطط معرّف الموارد المنتظم (URI) المخصّص، ثم انقر على حفظ لتفعيل دعم مخطَّط الموارد المنتظم (URI) المخصّص.
بديل لاستخدام المخططات المخصصة لمعرّفات الموارد المنتظمة (URI) على تطبيقات Chrome

يمكنك استخدام Chrome Identity API التي توفّر استجابة OAuth 2.0 مباشرةً إلى تطبيقك، ما يغنيك عن الحاجة إلى معرّف موارد منتظم (URI) لإعادة التوجيه.

إثبات ملكية التطبيق (Android وChrome)

يمكنك إثبات ملكية تطبيقك للحدّ من خطر انتحال هوية التطبيق.

Android

لإكمال عملية إثبات الملكية، يمكنك استخدام حساب المطوّر على Google Play إذا كان لديك حساب وتم تسجيل تطبيقك على Google Play Console. يجب استيفاء المتطلبات التالية لإكمال عملية التحقّق بنجاح:

  • يجب أن يكون لديك تطبيق مسجَّل في Google Play Console يحمل اسم الحزمة والملف المرجعي لشهادة توقيع SHA-1 نفسه المستخدَم في برنامج Android OAuth الذي تكمل عملية إثبات الملكية من أجله.
  • يجب أن يتوفّر لديك إذن المشرف للتطبيق في Google Play Console. مزيد من المعلومات حول إدارة أذونات الوصول في Google Play Console

في قسم إثبات ملكية التطبيق في برنامج Android، انقر على زر إثبات الملكية لإكمال عملية إثبات الملكية.

إذا اكتملت عملية التحقّق بنجاح، سيظهر إشعار يؤكّد نجاحها. وبخلاف ذلك، ستظهر رسالة خطأ.

لإصلاح تعذُّر إثبات الملكية، يُرجى تجربة ما يلي:

  • تأكَّد من أنّ التطبيق الذي تريد إثبات ملكيته هو تطبيق مسجَّل في Google Play Console.
  • تأكَّد من حصولك على إذن المشرف للتطبيق في Google Play Console.
Chrome

لإكمال عملية إثبات الملكية، عليك استخدام حساب المطوّر في "سوق Chrome الإلكتروني". يجب استيفاء المتطلبات التالية لإكمال عملية التحقّق من المعلِنين بنجاح:

في قسم إثبات ملكية التطبيق ضِمن برنامج إضافة Chrome، انقر على الزر إثبات الملكية لإكمال عملية إثبات الملكية.

ملاحظة: يُرجى الانتظار بضع دقائق قبل إكمال عملية إثبات الملكية بعد منح إذن الوصول إلى حسابك.

إذا اكتملت عملية التحقّق بنجاح، سيظهر إشعار يؤكّد نجاحها. وبخلاف ذلك، ستظهر رسالة خطأ.

لإصلاح تعذُّر إثبات الملكية، يُرجى تجربة ما يلي:

  • تأكَّد من توفّر عنصر مسجَّل في لوحة بيانات المطوّر في "سوق Chrome الإلكتروني" يتضمّن معرّف العنصر نفسه الخاص بعميل OAuth لإضافة Chrome الذي تريد إكمال عملية إثبات الملكية من أجله.
  • يجب أن تكون ناشرًا للتطبيق، أي يجب أن تكون إما الناشر الفردي للتطبيق أو عضوًا في مجموعة الناشرين الخاصة بالتطبيق. يمكنك الاطّلاع على مزيد من المعلومات حول إدارة أذونات الوصول في لوحة بيانات المطوّر في "سوق Chrome الإلكتروني".
  • إذا عدّلت للتو قائمة ناشري المجموعة، تأكَّد من مزامنة قائمة اشتراك حساب مجموعة الناشرين في لوحة بيانات المطوّر في "سوق Chrome الإلكتروني". مزيد من المعلومات عن مزامنة قائمة عضوية الناشرين

عنوان IP الاسترجاعي (macOS وLinux وWindows Desktop)

لتلقّي رمز التفويض باستخدام عنوان URL هذا، يجب أن يكون تطبيقك يستمع إلى البيانات على خادم الويب المحلي. هذا ممكن على العديد من المنصات، ولكن ليس كلها. ومع ذلك، إذا كانت المنصّة التي تستخدِمها تتيح ذلك، هذه هي الآلية التي يُنصح بها للحصول على رمز التفويض.

عندما يتلقّى تطبيقك استجابة التفويض، من المفترض أن يستجيب تطبيقك لسهولة الاستخدام من خلال عرض صفحة HTML تطلب من المستخدم إغلاق المتصفّح والعودة إلى تطبيقك.

الاستخدام المقترَح تطبيقات macOS وLinux وWindows لسطح المكتب (ولكن ليس النظام الأساسي العام لـ Windows)
قيم النماذج اضبط نوع التطبيق على تطبيق سطح المكتب.

نسخ/لصق يدوي

تحديد نطاقات الوصول

تتيح "النطاقات" لتطبيقك أن يطلب إذن الوصول إلى الموارد التي يحتاج إليها فقط، مع السماح للمستخدمين أيضًا بالتحكّم في مقدار أذونات الوصول التي يمنحونها لتطبيقك. وبالتالي، قد تكون هناك علاقة عكسية بين عدد النطاقات المطلوبة واحتمالية الحصول على موافقة المستخدم.

قبل البدء في تنفيذ تفويض OAuth 2.0، ننصحك بتحديد النطاقات التي سيحتاج تطبيقك إلى إذن للوصول إليها.

يستخدم الإصدار الثالث من YouTube Data API النطاقات التالية:

المناظير
https://www.googleapis.com/auth/youtubeإدارة حسابك في YouTube
https://www.googleapis.com/auth/youtube.channel-memberships.creatorالاطّلاع على قائمة بأعضاء القناة النشطين حاليًا ومستواهم الحالي وتاريخ انضمامهم
https://www.googleapis.com/auth/youtube.force-sslالاطّلاع على فيديوهاتك على YouTube وتقييماتها وتعليقاتها وترجماتها وكذلك تعديلها وحذفها نهائيًا
https://www.googleapis.com/auth/youtube.readonlyعرض حسابك في YouTube
https://www.googleapis.com/auth/youtube.uploadإدارة فيديوهات YouTube
https://www.googleapis.com/auth/youtubepartnerعرض وإدارة أصولك والمحتوى المرتبط بها على YouTube
https://www.googleapis.com/auth/youtubepartner-channel-auditعرض معلومات خاصة عن قناتك على YouTube ذات صلة أثناء عملية تدقيق شريك YouTube

يحتوي مستند نطاقات OAuth 2.0 API على قائمة كاملة بالنطاقات التي قد تستخدمها للوصول إلى واجهات Google APIs.

الحصول على رموز الدخول عبر OAuth 2.0

توضِّح الخطوات التالية كيفية تفاعل تطبيقك مع خادم OAuth 2.0 من Google للحصول على موافقة المستخدم لتنفيذ طلب واجهة برمجة التطبيقات نيابةً عنه. يجب أن يحصل تطبيقك على تلك الموافقة ليتمكّن من تنفيذ طلب Google API الذي يتطلّب الحصول على إذن المستخدم.

الخطوة 1: إنشاء أداة للتحقّق من الرموز وإجراء اختبار

تتيح Google استخدام بروتوكول Proof Key for Code Exchange (PKCE) لتعزيز أمان مسار التطبيق المثبَّت. ويتم إنشاء أداة فريدة للتحقّق من الرموز لكل طلب تفويض، ويتم إرسال قيمته التي تم تحويلها، تُسمى "code_challenge"، إلى خادم التفويض للحصول على رمز التفويض.

إنشاء أداة التحقّق من الرموز

code_verifier عبارة عن سلسلة عشوائية مشفَّرة بقدر كبير من الإنتروبيا تستخدم الأحرف غير المحجوزة [A-Z] / [a-z] / [0-9] / "-" / "." / "_" / "~"، بحد أدنى للطول يبلغ 43 حرفًا ولا يزيد طوله عن 128 حرفًا.

يجب أن تحتوي أداة التحقق من الرموز على قصور كافٍ لجعل تخمين القيمة غير عملي.

إنشاء تحدّي الرمز

هناك طريقتان لإنشاء تحدي الرمز.

طرق إنشاء تحدّي الرموز
S256 (موصى بها) تحدي الرمز هو عبارة عن تجزئة Base64URL (بدون مساحة متروكة) بترميز SHA256 بأداة التحقّق من الرموز.
code_challenge = BASE64URL-ENCODE(SHA256(ASCII(code_verifier)))
عادي اختبار الرمز هو نفس قيمة أداة التحقق من الرموز التي تم إنشاؤها أعلاه.
code_challenge = code_verifier

الخطوة 2: إرسال طلب إلى خادم OAuth 2.0 في Google

للحصول على إذن المستخدم، أرسِل طلبًا إلى خادم تفويض Google على https://accounts.google.com/o/oauth2/v2/auth. تعالج نقطة النهاية هذه البحث في الجلسة النشطة، وتصادق على المستخدم، وتحصل على موافقة المستخدم. يمكن الوصول إلى نقطة النهاية عبر طبقة المقابس الآمنة فقط، وترفض اتصالات HTTP (غير طبقة المقابس الآمنة).

يتيح خادم التفويض استخدام معلَمات سلسلة طلب البحث التالية للتطبيقات المثبّتة:

المعلمات
client_id مطلوب

معرِّف العميل لتطبيقك. يمكنك العثور على هذه القيمة في Credentials page API Console.

redirect_uri مطلوب

تحدِّد هذه السياسة طريقة إرسال خادم التفويض من Google للاستجابة إلى تطبيقك. وتتوفر العديد من خيارات إعادة التوجيه للتطبيقات المثبّتة، وسيكون عليك إعداد بيانات الاعتماد الخاصة بالتفويض مع مراعاة طريقة معيّنة لإعادة التوجيه.

يجب أن تتطابق القيمة بشكل تام مع أحد معرّفات الموارد المنتظمة (URI) المعتمَدة لإعادة التوجيه لبرنامج OAuth 2.0، الذي تم ضبطه في Credentials pageالخاصة ببرنامج API Console. وإذا لم تتطابق هذه القيمة مع معرّف موارد منتظم (URI) معتمَد، سيظهر لك خطأ redirect_uri_mismatch.

يعرض الجدول أدناه قيمة معلَمة redirect_uri المناسبة لكل طريقة:

قيم redirect_uri
مخطط معرّف موارد منتظم (URI) مخصّص com.example.app:redirect_uri_path

أو

com.googleusercontent.apps.123:redirect_uri_path
  • com.example.app هو تدوين نظام أسماء النطاقات العكسي لنطاق تحت سيطرتك. يجب أن يحتوي المخطط المخصص على نقطة ليكون صالحًا.
  • com.googleusercontent.apps.123 هو تدوين نظام أسماء النطاقات العكسي لمعرّف العميل.
  • redirect_uri_path هو مكوِّن مسار اختياري، مثل /oauth2redirect. يُرجى العِلم أنّ المسار يجب أن يبدأ بشرطة مائلة واحدة، وهي مختلفة عن عناوين URL العادية التي تستخدم HTTP.
عنوان IP الاحتياطي http://127.0.0.1:port أو http://[::1]:port

يمكنك الاستعلام من النظام الأساسي عن عنوان IP ذي الصلة بالاسترجاع، وبدء مستمع HTTP على منفذ متاح عشوائي. استبدِل port برقم المنفذ الفعلي الذي يستمع التطبيق إليه.

يُرجى العلم أنّ إتاحة خيار إعادة توجيه عنوان IP للاسترجاع على تطبيقات الأجهزة الجوّالة تم إيقافها.

response_type مطلوب

تحدِّد هذه السياسة ما إذا كانت نقطة نهاية Google OAuth 2.0 تعرض رمز تفويض.

يمكنك ضبط قيمة المَعلمة على code للتطبيقات المثبّتة.

scope مطلوب

تمثّل هذه السمة قائمة بالنطاقات مع الفصل بينها بمسافات تحدّد الموارد التي يمكن لتطبيقك الوصول إليها نيابةً عن المستخدم. تحدِّد هذه القيم شاشة الموافقة التي تعرضها Google للمستخدم.

تتيح "النطاقات" لتطبيقك أن يطلب إذن الوصول إلى الموارد التي يحتاج إليها فقط مع السماح أيضًا للمستخدمين بالتحكّم في مقدار أذونات الوصول التي يمنحونها لتطبيقك. وبالتالي، هناك علاقة عكسية بين عدد النطاقات المطلوبة واحتمالية الحصول على موافقة المستخدم.

يستخدم الإصدار الثالث من YouTube Data API النطاقات التالية:

المناظير
https://www.googleapis.com/auth/youtubeإدارة حسابك في YouTube
https://www.googleapis.com/auth/youtube.channel-memberships.creatorالاطّلاع على قائمة بأعضاء القناة النشطين حاليًا ومستواهم الحالي وتاريخ انضمامهم
https://www.googleapis.com/auth/youtube.force-sslالاطّلاع على فيديوهاتك على YouTube وتقييماتها وتعليقاتها وترجماتها وكذلك تعديلها وحذفها نهائيًا
https://www.googleapis.com/auth/youtube.readonlyعرض حسابك في YouTube
https://www.googleapis.com/auth/youtube.uploadإدارة فيديوهات YouTube
https://www.googleapis.com/auth/youtubepartnerعرض وإدارة أصولك والمحتوى المرتبط بها على YouTube
https://www.googleapis.com/auth/youtubepartner-channel-auditعرض معلومات خاصة عن قناتك على YouTube ذات صلة أثناء عملية تدقيق شريك YouTube

يوفّر مستند نطاقات واجهة برمجة التطبيقات OAuth 2.0 قائمة كاملة بالنطاقات التي قد تستخدمها للوصول إلى واجهات برمجة تطبيقات Google.

code_challenge سمة مقترَحة

تحدِّد هذه السياسة code_verifier مرمّزًا سيتم استخدامه كاختبار من جهة الخادم أثناء تبادل رمز التفويض. يُرجى الاطّلاع على قسم إنشاء اختبار التحقّق من الرمز أعلاه للحصول على مزيد من المعلومات.

code_challenge_method سمة مقترَحة

تُحدِّد الطريقة التي تم استخدامها لترميز code_verifier والتي سيتم استخدامها أثناء تبادل رمز التفويض. ويجب استخدام هذه المَعلمة مع معلَمة code_challenge الموضّحة أعلاه. ويتم ضبط قيمة code_challenge_method تلقائيًا على plain إذا لم تكن متوفّرة في الطلب الذي يتضمّن code_challenge. والقيمتان الوحيدتان المسموح بهما لهذه المَعلمة هما S256 أو plain.

state سمة مقترَحة

تحدِّد هذه السياسة أي قيمة سلسلة يستخدمها تطبيقك للحفاظ على الحالة بين طلب التفويض واستجابة خادم التفويض. يعرض الخادم القيمة نفسها التي ترسلها كزوج name=value في معرّف جزء عنوان URL (#) ضمن redirect_uri بعد موافقة المستخدم على طلب الوصول إلى تطبيقك أو رفضه.

يمكنك استخدام هذه المَعلمة لعدة أغراض، مثل توجيه المستخدم إلى المورد الصحيح في تطبيقك، وإرسال رقم Nonces، والحدّ من تزييف الطلبات من مواقع إلكترونية متعددة. بما أنّه يمكن تخمين redirect_uri، قد يؤدي استخدام القيمة state إلى زيادة ضمانك بأنّ الاتصال الوارد يكون نتيجة طلب مصادقة. إذا أنشأت سلسلة عشوائية أو ترميز تجزئة ملف تعريف الارتباط أو قيمة أخرى تسجّل حالة العميل، يمكنك التحقّق من صحة الاستجابة بالإضافة إلى التأكّد من أنّ الطلب والاستجابة قد نشأا من المتصفح نفسه، لتوفير الحماية من هجمات مثل تزوير الطلبات من مواقع إلكترونية متعددة. راجِع مستندات OpenID Connect للاطّلاع على مثال عن كيفية إنشاء رمز مميّز state وتأكيده.

login_hint اختياريّ

إذا كان التطبيق يعرف المستخدم الذي يحاول المصادقة، يمكنه استخدام هذه المعلَمة لتقديم تلميح إلى خادم مصادقة Google. ويستخدم الخادم التلميح لتبسيط عملية تسجيل الدخول إما من خلال ملء حقل البريد الإلكتروني مسبقًا في نموذج تسجيل الدخول أو من خلال اختيار جلسة تسجيل الدخول المتعدد المناسبة.

اضبط قيمة المَعلمة على عنوان بريد إلكتروني أو معرّف sub، ما يعادل معرّف Google للمستخدم.

نماذج عناوين URL للتفويض

تعرض علامات التبويب أدناه نماذج عناوين URL للمصادقة الخاصة بخيارات معرّف الموارد المنتظم (URI) المختلفة لإعادة التوجيه.

يطلب كل عنوان URL الوصول إلى نطاق يسمح بالوصول إلى بيانات YouTube الخاصة بالمستخدم.

عناوين URL متطابقة باستثناء قيمة المعلَمة redirect_uri. تحتوي عناوين URL أيضًا على المَعلمتَين response_type وclient_id المطلوبتَين، بالإضافة إلى مَعلمة state الاختيارية. يحتوي كل عنوان URL على فواصل أسطر ومسافات لسهولة القراءة.

مخطط معرِّف موارد منتظم (URI) مخصّص

https://accounts.google.com/o/oauth2/v2/auth?
 scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fyoutube.force-ssl&
 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=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fyoutube.force-ssl&
 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.

Android

قد تظهر رسالة الخطأ هذه لمطوّري برامج Android عند فتح طلبات الحصول على إذن في android.webkit.WebView. وبدلاً من ذلك، على المطوّرين استخدام مكتبات Android مثل تسجيل الدخول بحساب Google على أجهزة Android أو AppAuth for Android من مؤسسة OpenID.

قد يظهر هذا الخطأ لمطوِّري الويب عندما يفتح تطبيق Android رابط ويب عامًا في وكيل مستخدم مضمّن وينتقل المستخدم إلى نقطة نهاية تفويض OAuth 2.0 من Google من موقعك الإلكتروني. على المطوّرين أن يسمحوا بفتح الروابط العامة في معالج الروابط التلقائي لنظام التشغيل، والذي يتضمّن معالِجات روابط تطبيقات Android أو تطبيق المتصفّح التلقائي. وتُعد مكتبة علامات تبويب Android المخصّصة خيارًا متاحًا أيضًا.

iOS

قد يظهر هذا الخطأ لمطوِّري تطبيقات iOS وmacOS عند فتح طلبات التفويض في WKWebView. وبدلاً من ذلك، على المطوّرين استخدام مكتبات iOS مثل تسجيل الدخول بحساب Google على أجهزة iOS أو AppAuth for iOS من OpenID Foundation.

قد يظهر هذا الخطأ لمطوِّري الويب عندما يفتح تطبيق iOS أو macOS رابط ويب عامًا في وكيل مستخدم مضمّن وينتقل المستخدم إلى نقطة نهاية تفويض OAuth 2.0 من Google من موقعك الإلكتروني. على المطوّرين أن يسمحوا بفتح الروابط العامة في معالج الروابط التلقائي لنظام التشغيل، والذي يتضمّن معالجات الروابط العامة أو تطبيق المتصفّح التلقائي، مع العِلم بأنّ مكتبة SFSafariViewController هي أيضًا خيار متاح.

org_internal

يمثّل معرِّف عميل OAuth في الطلب جزءًا من مشروع يحدّ من إمكانية الوصول إلى حسابات Google في مؤسسة معيّنة على Google Cloud. لمزيد من المعلومات حول خيار الإعداد هذا، يمكنك الاطّلاع على القسم نوع المستخدم في مقالة المساعدة "إعداد شاشة طلب الموافقة المتعلقة ببروتوكول OAuth".

invalid_grant

إذا كنت تستخدم أداة التحقّق من الرموز وأداة التحقّق، تكون مَعلمة code_callenge غير صالحة أو غير متوفّرة. تأكَّد من ضبط المَعلمة code_challenge بشكل صحيح.

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

redirect_uri_mismatch

لا يتطابق redirect_uri الذي تم تمريره في طلب التفويض مع معرِّف الموارد المنتظم (URI) المعتمَد لإعادة التوجيه لمعرِّف عميل OAuth. يمكنك مراجعة معرّفات الموارد المنتظمة (URI) المعتمَدة لإعادة التوجيه في Google API Console Credentials page.

قد يكون redirect_uri الذي تم تمريره غير صالح لنوع العميل.

قد تشير مَعلمة redirect_uri إلى مسار OAuth خارج النطاق (OOB) الذي تم إيقافه ولم يعُد متاحًا. راجِع دليل نقل البيانات لتعديل عملية الدمج.

invalid_request

حدث خطأ في الطلب الذي قدّمته. وقد يرجع ذلك إلى عدة أسباب:

  • لم يتم تنسيق الطلب بشكل صحيح
  • كان الطلب يفتقد إلى المعلمات المطلوبة
  • يستخدم الطلب طريقة إذن لا تتوافق مع Google. التحقّق من أنّ عملية دمج OAuth تستخدم طريقة دمج مقترَحة
  • يتم استخدام نظام مخصّص لمعرّف الموارد المنتظم (URI) لإعادة التوجيه : إذا ظهرت لك رسالة الخطأ نظام معرّف الموارد المنتظم (URI) المخصّص غير متوافق مع تطبيقات Chrome أو لم يتم تفعيل نظام معرّف الموارد المنتظم (URI) المخصّص لعميل Android، هذا يعني أنّك تستخدم نظامًا لمعرّف الموارد المنتظم (URI) مخصص غير متوافق مع تطبيقات Chrome ويتم إيقافه تلقائيًا على Android. مزيد من المعلومات حول بدائل المخططات المخصّصة لمعرّفات الموارد المنتظمة (URI)

الخطوة 4: التعامل مع استجابة خادم OAuth 2.0

تعتمد الطريقة التي يتلقّى بها تطبيقك استجابة التفويض على مخطط معرّف الموارد المنتظم (URI) لإعادة التوجيه المستخدَم. بغض النظر عن المخطط، ستحتوي الاستجابة على رمز تفويض (code) أو خطأ (error). على سبيل المثال، تشير القيمة error=access_denied إلى أنّ المستخدم رفض الطلب.

إذا منح المستخدم إذن الوصول إلى تطبيقك، يمكنك استبدال رمز التفويض برمز دخول ورمز مميّز لإعادة التحميل كما هو موضّح في الخطوة التالية.

الخطوة 5: استبدال رمز التفويض لإعادة التحميل ورموز الدخول

لاستبدال رمز تفويض برمز دخول، عليك طلب نقطة النهاية https://oauth2.googleapis.com/token وضبط المَعلمات التالية:

الحقول
client_id معرّف العميل الذي تم الحصول عليه من API Console Credentials page.
client_secret سر العميل الذي تم الحصول عليه من API Console Credentials page.
code رمز التفويض الذي تم عرضه من الطلب الأولي.
code_verifier أداة التحقّق من الرموز التي أنشأتها في الخطوة 1.
grant_type كما هو موضح في مواصفات OAuth 2.0، يجب ضبط قيمة هذا الحقل على authorization_code.
redirect_uri أحد معرّفات الموارد المنتظمة (URI) الخاصة بإعادة التوجيه والمدرجة في مشروعك ضمن API Console Credentials page الخاص بـ client_id المحدّد

يعرض المقتطف التالي نموذج طلب:

POST /token HTTP/1.1
Host: oauth2.googleapis.com
Content-Type: application/x-www-form-urlencoded

code=4/P7q7W91a-oMsCeLvIaQm6bTrgtp7&
client_id=your_client_id&
client_secret=your_client_secret&
redirect_uri=http://127.0.0.1:9004&
grant_type=authorization_code

يردّ Google على هذا الطلب من خلال عرض كائن JSON يحتوي على رمز دخول قصير الأجل ورمز مميز لإعادة التحميل.

يحتوي الردّ على الحقول التالية:

الحقول
access_token الرمز المميز الذي يرسله تطبيقك لمصادقة طلب واجهة برمجة تطبيقات Google.
expires_in العمر المتبقي لرمز الدخول بالثواني.
id_token ملاحظة: لا يتم عرض هذه السمة إلا إذا كان طلبك يتضمّن نطاق هوية، مثل openid أو profile أو email. وتكون القيمة هي رمز JSON المميّز للويب (JWT) الذي يحتوي على معلومات هوية موقّعة رقميًا حول المستخدم.
refresh_token هو رمز مميّز يمكنك استخدامه للحصول على رمز دخول جديد. تظل الرموز المميّزة لإعادة التحميل صالحة إلى أن يبطل المستخدم إذن الوصول إليها. لاحظ أن الرموز المميزة للتحديث يتم إرجاعها دائمًا للتطبيقات المثبتة.
scope تمثّل هذه السمة نطاقات الوصول الممنوحة من خلال access_token كقائمة من السلاسل الحسّاسة لحالة الأحرف والمفصولة بمسافات.
token_type نوع الرمز المميّز الذي تم عرضه. في الوقت الحالي، يتم ضبط قيمة هذا الحقل دائمًا على Bearer.

يعرض المقتطف التالي نموذجًا للرد:

{
  "access_token": "1/fFAGRNJru1FTz70BzhT3Zg",
  "expires_in": 3920,
  "token_type": "Bearer",
  "scope": "https://www.googleapis.com/auth/youtube.force-ssl",
  "refresh_token": "1//xEoDL4iW3cxlI7yDbSRFYNG01kVKM2C-259HOF2aQbI"
}

الاتصال بـ Google APIs

بعد حصول تطبيقك على رمز الدخول، يمكنك استخدام هذا الرمز لإجراء اتصالات بواجهة برمجة تطبيقات Google نيابةً عن حساب مستخدم معيّن إذا تم منح نطاقات الوصول التي تطلبها واجهة برمجة التطبيقات. لإجراء ذلك، يمكنك تضمين رمز الدخول في طلب إلى واجهة برمجة التطبيقات عن طريق تضمين معلَمة طلب البحث access_token أو قيمة Bearer لعنوان HTTP يتضمّن Authorization. ويُفضّل استخدام عنوان HTTP عند الإمكان، لأنّ سلاسل طلبات البحث غالبًا ما تكون مرئية في سجلّات الخادم. وفي معظم الحالات، يمكنك استخدام مكتبة برامج لإعداد الطلبات الموجّهة إلى Google APIs (على سبيل المثال، عند طلب بيانات من YouTube Live Streaming API).

تجدر الإشارة إلى أنّ YouTube Live Streaming API لا تتيح تدفق حساب الخدمة. وبما أنّه لا تتوفّر طريقة لربط حساب الخدمة بحساب على YouTube، ستؤدي محاولات منح الإذن في الطلبات خلال هذا الإجراء إلى ظهور خطأ NoLinkedYouTubeAccount.

يمكنك تجربة جميع واجهات Google APIs وعرض نطاقاتها في ملعب OAuth 2.0.

أمثلة على الحصول على HTTP

قد يبدو طلب نقطة نهاية liveBroadcasts.list (واجهة YouTube Live Streaming API) باستخدام عنوان HTTP Authorization: Bearer على النحو التالي. ملاحظة: يجب تحديد رمز الدخول الخاص بك:

GET /youtube/v3/liveBroadcasts?part=id%2Csnippet&mine=true HTTP/1.1
Host: www.googleapis.com
Authorization: Bearer access_token

في ما يلي طلب لواجهة برمجة التطبيقات نفسها للمستخدم الذي تمت مصادقته باستخدام معلَمة سلسلة طلب البحث access_token:

GET https://www.googleapis.com/youtube/v3/liveBroadcasts?access_token=access_token&part=id%2Csnippet&mine=true

أمثلة على curl

يمكنك اختبار هذه الأوامر باستخدام تطبيق سطر الأوامر curl. إليك مثال يستخدم خيار عنوان HTTP (خيار مفضَّل):

curl -H "Authorization: Bearer access_token" https://www.googleapis.com/youtube/v3/liveBroadcasts?part=id%2Csnippet&mine=true

أو بدلاً من ذلك، خيار مَعلمة سلسلة طلب البحث:

curl https://www.googleapis.com/youtube/v3/liveBroadcasts?access_token=access_token&part=id%2Csnippet&mine=true

إعادة تحميل رمز الدخول

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

لإعادة تحميل رمز دخول، يرسل تطبيقك طلب HTTPS POST إلى خادم تفويض Google (https://oauth2.googleapis.com/token) الذي يتضمّن المعلَمات التالية:

الحقول
client_id معرّف العميل الذي تم الحصول عليه من API Console.
client_secret سر العميل الذي تم الحصول عليه من API Console. (لا يسري client_secret على الطلبات الواردة من العملاء المسجَّلين كتطبيقات Android أو iOS أو Chrome.)
grant_type وعلى النحو الموضّح في مواصفات OAuth 2.0، يجب ضبط قيمة هذا الحقل على refresh_token.
refresh_token الرمز المميّز لإعادة التحميل الذي يظهر من تبادل رمز التفويض

يعرض المقتطف التالي نموذج طلب:

POST /token HTTP/1.1
Host: oauth2.googleapis.com
Content-Type: application/x-www-form-urlencoded

client_id=your_client_id&
client_secret=your_client_secret&
refresh_token=refresh_token&
grant_type=refresh_token

ما دام المستخدم لم يُبطل إذن الوصول الممنوح للتطبيق، يعرض خادم الرمز المميّز كائن JSON يحتوي على رمز دخول جديد. يعرض المقتطف التالي نموذج رد:

{
  "access_token": "1/fFAGRNJru1FTz70BzhT3Zg",
  "expires_in": 3920,
  "scope": "https://www.googleapis.com/auth/drive.metadata.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 مع رمز الخطأ.

قراءات إضافية

يحدّد بروتوكول OAuth 2.0 للتطبيقات المحلية أفضل الممارسات الحالية لمجموعة مهندسي شبكة الإنترنت (IETF) العديد من أفضل الممارسات الموثَّقة هنا.