ربط حساب Google باستخدام OAuth

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

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

في مسار رمز التفويض، تحتاج إلى نقطتَي نهاية:

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

  • نقطة نهاية تبادل الرموز المميزة المسؤولة عن نوعين من التبادلات:

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

اختيار مسار OAuth 2.0

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

إرشادات التصميم

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

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

المتطلبات

  1. عليك إعلام المستخدم بأنّ حساب المستخدم سيتم ربطه بحساب Google، وليس على منتج محدّد من Google، مثل Google Home أو "مساعد Google".

الاقتراحات

ننصحك بتنفيذ الإجراءات التالية:

  1. عرض سياسة خصوصية Google: إدراج رابط يؤدي إلى سياسة خصوصية Google على شاشة طلب الموافقة

  2. البيانات التي ستتم مشاركتها. استخدام لغة واضحة وموجزة لإطلاع المستخدم على البيانات التي طلبها من Google والغرض من ذلك

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

  4. إمكانية الإلغاء. قدِّم للمستخدمين طريقة للرجوع أو الإلغاء في حال اختيار عدم الربط.

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

  6. إمكانية إلغاء الربط: قدِّم آلية تتيح للمستخدمين إلغاء الربط، مثل عنوان URL بإعدادات الحساب على النظام الأساسي. بدلاً من ذلك، يمكنك تضمين رابط إلى حساب Google حيث يمكن للمستخدمين إدارة الحساب المرتبط.

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

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

إنشاء المشروع

لإنشاء مشروعك من أجل استخدام ميزة ربط الحسابات، اتّبِع الخطوات التالية:

  1. Go to the Google API Console.
  2. انقر فوق إنشاء مشروع .
  3. أدخل اسمًا أو اقبل الاقتراح الذي تم إنشاؤه.
  4. قم بتأكيد أو تحرير أي حقول متبقية.
  5. انقر فوق إنشاء .

لعرض معرف المشروع الخاص بك:

  1. Go to the Google API Console.
  2. ابحث عن مشروعك في الجدول على الصفحة المقصودة. يظهر معرف المشروع في عمود المعرف .

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

  1. افتح صفحة شاشة موافقة OAuth في وحدة تحكُّم Google APIs.
  2. اختَر المشروع الذي أنشأته للتو، إذا طُلب منك ذلك.
  3. في صفحة "شاشة موافقة OAuth"، املأ النموذج وانقر على زر "حفظ".

    اسم التطبيق: اسم التطبيق الذي يطلب الموافقة يجب أن يعكس الاسم تطبيقك بدقة وأن يكون متسقًا مع اسم التطبيق الذي يظهر للمستخدمين في أي مكان آخر. سيظهر اسم التطبيق في شاشة الموافقة على ربط الحساب.

    شعار التطبيق: صورة على شاشة طلب الموافقة تساعد المستخدمين في التعرّف على تطبيقك. ويظهر الشعار في شاشة الموافقة على ربط الحساب وفي إعدادات الحساب.

    البريد الإلكتروني للدعم:ليتمكّن المستخدمون من التواصل معك لطرح أسئلة حول موافقتهم.

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

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

    رابط الصفحة الرئيسية للتطبيق: الصفحة الرئيسية لتطبيقك. يجب استضافة هذا النوع من المحتوى على نطاق معتمد.

    رابط سياسة خصوصية التطبيق: يظهر على شاشة الموافقة على ربط حساب Google. يجب استضافة هذا النوع من المحتوى على نطاق معتمد.

    رابط "بنود خدمة التطبيق" (اختياري): يجب استضافته على نطاق معتمد.

    الشكل 1. شاشة الموافقة على ربط حساب Google لتطبيق وهمي، Tunery

  4. تحقق من "حالة إثبات الملكية"، إذا كان طلبك يحتاج إلى التحقق، فانقر على الزر "إرسال للتحقق" لإرسال طلبك للتحقق. يمكنك الرجوع إلى متطلبات التحقُّق من OAuth لمعرفة التفاصيل.

تنفيذ خادم OAuth

لدعم التدفق الضمني لـ OAuth 2.0، تُجري الخدمة تفويضًا. نقطة النهاية متوفرة عبر HTTPS. نقطة النهاية هذه مسؤولة عن المصادقة الحصول على موافقة من المستخدمين للوصول إلى البيانات. نقطة نهاية التفويض توفّر واجهة مستخدم لتسجيل الدخول للمستخدمين الذين لم يسجّلوا الدخول إلى حساباتهم الموافقة على الوصول المطلوب.

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

تتضمن جلسة مسار OAuth 2.0 الضمني النموذجية التي تبدأها Google التدفق التالي:

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

التعامل مع طلبات التفويض

عندما يحتاج أحد تطبيقات Google إلى ربط الحساب عبر OAuth 2.0 ضمنيًا، ترسل Google المستخدم إلى نقطة نهاية التفويض من خلال الذي يتضمن المعلمات التالية:

مَعلمات نقطة نهاية التفويض
client_id معرِّف العميل الذي عيّنته لـ Google.
redirect_uri عنوان URL الذي ترسل إليه الرد على هذا الطلب.
state يشير هذا المصطلح إلى قيمة محاسبة يتم إرسالها إلى Google بدون أي تغيير في معرّف الموارد المنتظم (URI) لإعادة التوجيه.
response_type نوع القيمة المطلوب عرضها في الرد. بالنسبة إلى بروتوكول OAuth 2.0 الضمني يكون نوع الاستجابة دائمًا token.
user_locale إعدادات اللغة في حساب Google RFC5646 المستخدم لترجمة المحتوى إلى لغة المستخدم المفضلة.

على سبيل المثال، إذا كانت نقطة نهاية التفويض متاحة على https://myservice.example.com/auth، قد يظهر الطلب على النحو التالي:

GET https://myservice.example.com/auth?client_id=GOOGLE_CLIENT_ID&redirect_uri=REDIRECT_URI&state=STATE_STRING&response_type=token&user_locale=LOCALE

لتتمكَّن نقطة نهاية التفويض من معالجة طلبات تسجيل الدخول، عليك إجراء ما يلي: الخطوات:

  1. يُرجى التحقّق من القيمتَين client_id وredirect_uri من أجل: منع منح الوصول إلى تطبيقات العميل غير المقصودة أو التي تم إعدادها بشكلٍ غير صحيح:

    • تأكَّد من أنّ client_id يتطابق مع معرّف العميل الذي أدخلته. تعيينه إلى Google.
    • تأكَّد من أنّ عنوان URL المحدّد من قِبل redirect_uri على النحو التالي:
      https://oauth-redirect.googleusercontent.com/r/YOUR_PROJECT_ID
      https://oauth-redirect-sandbox.googleusercontent.com/r/YOUR_PROJECT_ID
      
  2. تحقق مما إذا كان المستخدم قد سجّل الدخول إلى خدمتك. في حال لم يكن المستخدم مسجِّلاً الدخول أو أكمل عملية تسجيل الدخول أو الاشتراك في الخدمة.

  3. أنشئ رمز دخول لتتمكَّن Google من استخدامه للوصول إلى واجهة برمجة التطبيقات الخاصة بك. تشير رسالة الأشكال البيانية يمكن أن يكون رمز الدخول أي قيمة سلسلة، ولكن يجب أن يمثل المستخدم والعميل الذي يرتبط به الرمز المميز ويجب ألا يكون من الممكن تخمينه.

  4. إرسال استجابة HTTP تؤدي إلى إعادة توجيه متصفّح المستخدم إلى عنوان URL التي تحددها المعلمة redirect_uri. تضمين جميع المعلمات التالية في جزء عنوان URL:

    • access_token: رمز الدخول الذي أنشأته للتو
    • token_type: السلسلة bearer
    • state: قيمة الحالة غير المعدَّلة من القيمة الأصلية طلب

    في ما يلي مثال على عنوان URL الناتج:

    https://oauth-redirect.googleusercontent.com/r/YOUR_PROJECT_ID#access_token=ACCESS_TOKEN&token_type=bearer&state=STATE_STRING

يتلقّى معالج إعادة التوجيه OAuth 2.0 من Google رمز الدخول ويؤكد ذلك. أن قيمة state لم تتغير. بعد حصول Google على رمز الدخول إلى خدمتك، ترفق Google الرمز المميز بالمكالمات اللاحقة إلى واجهات برمجة تطبيقات الخدمة.

التعامل مع طلبات معلومات المستخدم

نقطة نهاية userinfo هي مورد OAuth 2.0 محمي يعرض مطالبات بشأن المستخدم المرتبط. يُعد تنفيذ نقطة نهاية userinfo واستضافتها اختياريًا، باستثناء حالات الاستخدام التالية:

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

عناوين طلبات نقطة نهاية userinfo
Authorization header رمز الدخول من النوع "الحامل".

على سبيل المثال، إذا كانت نقطة نهاية userinfo متاحة على https://myservice.example.com/userinfo، قد يظهر الطلب على النحو التالي:

GET /userinfo HTTP/1.1
Host: myservice.example.com
Authorization: Bearer ACCESS_TOKEN

لتتمكّن نقطة نهاية معلومات المستخدم من معالجة الطلبات، عليك اتّباع الخطوات التالية:

  1. يمكنك استخراج رمز الدخول من عنوان التفويض ومعلومات الإرجاع للمستخدم المرتبط برمز الدخول.
  2. إذا كان رمز الدخول غير صالح، يمكنك عرض الخطأ HTTP 401 "غير مصرح به" مع استخدام عنوان الاستجابة WWW-Authenticate. في ما يلي مثال على استجابة خطأ في معلومات المستخدم:
    HTTP/1.1 401 Unauthorized
    WWW-Authenticate: error="invalid_token",
    error_description="The Access Token expired"
    
    إذا تم عرض رسالة الخطأ 401 "غير مصرّح به" أو أي استجابة أخرى غير ناجحة للخطأ أثناء عملية الربط، لن تتمكّن من استرداد الخطأ، وسيتم تجاهل الرمز المميّز الذي تم استرداده وسيضطر المستخدم إلى بدء عملية الربط مرة أخرى.
  3. إذا كان رمز الدخول صالحًا، يتم عرض الاستجابة HTTP 200 مع كائن JSON التالي في نص HTTPS. الرد:

    {
    "sub": "USER_UUID",
    "email": "EMAIL_ADDRESS",
    "given_name": "FIRST_NAME",
    "family_name": "LAST_NAME",
    "name": "FULL_NAME",
    "picture": "PROFILE_PICTURE",
    }
    
    إذا عرضت نقطة نهاية معلومات المستخدم استجابة نجاح HTTP 200، يتم تسجيل الرمز المميز الذي تم استرداده والمطالبات مقابل حساب المستخدم على Google.

    استجابة نقطة نهاية لمعلومات المستخدم
    sub معرّف فريد يعرّف المستخدِم في نظامك.
    email عنوان البريد الإلكتروني للمستخدم.
    given_name اختياري: الاسم الأول للمستخدم.
    family_name اختياري: اسم العائلة للمستخدم.
    name اختياري: اسم المستخدم الكامل.
    picture اختياري: صورة الملف الشخصي للمستخدم.

التحقّق من صحة عملية التنفيذ

يمكنك التحقق من صحة التطبيق الخاص بك باستخدام ملعب أوث 2.0 الأداة.

في الأداة ، قم بالخطوات التالية:

  1. انقر فوق تكوين لفتح نافذة تكوين أوث 2.0.
  2. في مجال تدفق أوث، اختر من جانب العميل.
  3. في مجال أوث النهايات، حدد مخصص.
  4. حدد نقطة نهاية OAuth 2.0 ومعرف العميل الذي عينته لـ Google في الحقول المقابلة.
  5. في القسم الخطوة 1، لا تحدد أي نطاقات جوجل. بدلاً من ذلك ، اترك هذا الحقل فارغًا أو اكتب نطاقًا صالحًا لخادمك (أو سلسلة عشوائية إذا كنت لا تستخدم نطاقات OAuth). عند الانتهاء من ذلك، انقر فوق تخويل واجهات برمجة التطبيقات.
  6. في الأقسام الخطوة 2 و الخطوة 3، انتقل من خلال تدفق أوث 2.0 والتحقق من أن كل خطوة تعمل على النحو المنشود.

يمكنك التحقق من صحة التطبيق الخاص بك باستخدام حساب Google ربط تجريبي الأداة.

في الأداة ، قم بالخطوات التالية:

  1. انقر على تسجيل الدخول باستخدام زر جوجل.
  2. اختر الحساب الذي ترغب في ربطه.
  3. أدخل معرف الخدمة.
  4. اختياريًا ، أدخل نطاقًا واحدًا أو أكثر ستطلب الوصول إليه.
  5. انقر فوق ابدأ تجريبي.
  6. عند المطالبة ، أكد أنه يمكنك الموافقة ورفض طلب الربط.
  7. تأكد من إعادة توجيهك إلى النظام الأساسي الخاص بك.