نظرة عامة
تضيف ميزة الربط السلس المستند إلى OAuth من خلال ميزة "تسجيل الدخول باستخدام حساب Google" ميزة "تسجيل الدخول باستخدام حساب Google" إلى الربط المستند إلى OAuth. يوفّر ذلك تجربة ربط سلسة لمستخدمي Google، ويتيح أيضًا إنشاء حساب، ما يسمح للمستخدم بإنشاء حساب جديد على خدمتك باستخدام حسابه على Google.
لإجراء عملية ربط الحساب باستخدام OAuth و"تسجيل الدخول باستخدام حساب Google"، اتّبِع الخطوات العامة التالية:
- أولاً، اطلب من المستخدم الموافقة على الوصول إلى ملفه الشخصي في حساب Google.
- استخدِم المعلومات الواردة في ملفه الشخصي للتحقّق مما إذا كان حساب المستخدم متوفّرًا.
- بالنسبة إلى المستخدمين الحاليين، اربط الحسابات.
- إذا لم تتمكّن من العثور على مستخدم Google مطابق في نظام المصادقة، عليك التحقّق من صحة رمز التعريف المميّز الذي تلقّيته من Google. يمكنك بعد ذلك إنشاء مستخدم استنادًا إلى معلومات الملف الشخصي الواردة في رمز المعرّف المميّز.
الشكل 1 ربط الحسابات على هاتف المستخدم باستخدام ميزة "الربط السلس"
الربط السلس: مسار OAuth + "تسجيل الدخول باستخدام حساب Google"
يوضّح مخطط التسلسل التالي تفاصيل التفاعلات بين المستخدم وGoogle ونقطة نهاية تبادل الرموز المميزة في ميزة "الربط السلس".
الأدوار والمسؤوليات
يوضّح الجدول التالي أدوار ومسؤوليات الجهات الفاعلة في مسار الربط المبسّط.
| الجهة الفاعلة / المكوّن | دور قائمة العناوين العمومية | المسؤوليات |
|---|---|---|
| تطبيق / خادم Google | عميل OAuth | الحصول على موافقة المستخدم على خدمة "تسجيل الدخول باستخدام حساب Google"، وتمرير تأكيدات الهوية (JWT) إلى الخادم، وتخزين الرموز المميزة الناتجة بأمان |
| نقطة نهاية تبادل الرموز المميزة | موفِّر الهوية / خادم التفويض | تتحقّق هذه الخدمة من صحة تأكيدات الهوية، وتبحث عن حسابات حالية، وتتعامل مع نوايا ربط الحسابات (check وget وcreate)، وتصدر رموزًا مميّزة استنادًا إلى النوايا المطلوبة. |
| واجهة برمجة التطبيقات الخاصة بالخدمة | خادم الموارد | توفير إمكانية الوصول إلى بيانات المستخدم عند تقديم رمز دخول صالح |
متطلبات ميزة "الربط السلس"
- نفِّذ مسار ربط الحسابات الأساسي باستخدام OAuth. يجب أن تتيح خدمتك نقاط نهاية التفويض وتبادل الرموز المميزة المتوافقة مع بروتوكول OAuth 2.0.
- يجب أن تتوافق نقطة نهاية تبادل الرموز المميزة مع تأكيدات رمز JSON المميّز للويب (JWT) وأن تنفّذ الأهداف
checkوcreateوget.
منطق اتخاذ القرار بشأن الربط المبسّط
تحدّد المنطق التالي كيفية طلب الأهداف أثناء مسار "ربط الحسابات بسلاسة":
- هل لدى المستخدم حساب في نظام المصادقة؟ (يقرّر المستخدم ذلك من خلال اختيار "نعم" أو "لا")
- نعم : هل يستخدم المستخدم عنوان البريد الإلكتروني المرتبط بحساب Google لتسجيل الدخول إلى منصتك؟ (يقرّر المستخدم ذلك من خلال اختيار "نعم" أو "لا")
- نعم : هل لدى المستخدم حساب مطابق في نظام المصادقة؟ (يتم الاتصال بالرقم
check intentللتأكيد)- YES : يتم الاتصال بـ
get intentويتم ربط الحساب إذا تم عرض نتيجة get intent بنجاح. - لا : إنشاء حساب جديد؟ (يقرّر المستخدم ذلك من خلال اختيار "نعم" أو "لا")
- نعم : يتم استدعاء
create intentويتم ربط الحساب إذا تم عرض نتيجة إنشاء الطلب بنجاح. - لا : يتم بدء عملية الربط باستخدام OAuth، ويتم توجيه المستخدم إلى المتصفّح، ويُمنح المستخدم خيار الربط بعنوان بريد إلكتروني مختلف.
- نعم : يتم استدعاء
- YES : يتم الاتصال بـ
- لا : يتم تفعيل مسار الربط باستخدام OAuth، ويتم توجيه المستخدم إلى المتصفّح الخاص به، ويُمنح المستخدم خيار الربط بعنوان بريد إلكتروني مختلف.
- نعم : هل لدى المستخدم حساب مطابق في نظام المصادقة؟ (يتم الاتصال بالرقم
- لا : هل لدى المستخدم حساب مطابق في نظام المصادقة؟ (يتم الاتصال بالرقم
check intentللتأكيد)- YES : يتم الاتصال بـ
get intentويتم ربط الحساب إذا تم عرض نتيجة get intent بنجاح. - NO : يتم استدعاء
create intentويتم ربط الحساب إذا تم عرض نتيجة إنشاء النية بنجاح.
- YES : يتم الاتصال بـ
- نعم : هل يستخدم المستخدم عنوان البريد الإلكتروني المرتبط بحساب Google لتسجيل الدخول إلى منصتك؟ (يقرّر المستخدم ذلك من خلال اختيار "نعم" أو "لا")
وصفة التنفيذ
يجب أن تنفّذ نقطة نهاية تبادل الرموز المميزة الأهداف check وget وcreate لتوفير ميزة "الربط السلس".
اتّبِع الخطوات التالية للتعامل مع النوايا المختلفة:
التحقّق من وجود حساب مستخدم حالي (التحقّق من الغرض)
تتصل Google بنقطة تبادل الرموز المميزة للتحقّق مما إذا كان مستخدم Google موجودًا في نظامك. لمعرفة تفاصيل المَعلمات، يُرجى الاطّلاع على أغراض الربط المبسّط.
وصفة التنفيذ
للتعامل مع الغرض check ، يُرجى تنفيذ الإجراءات التالية:
التحقّق من صحة الطلب:
- يُرجى التحقّق من
client_idوclient_secretوgrant_type(يجب أن يكونurn:ietf:params:oauth:grant-type:jwt-bearer). - يُرجى التحقّق من صحة
assertion(رمز JWT) باستخدام المعايير الواردة في التحقّق من صحة رمز JWT.
- يُرجى التحقّق من
البحث عن المستخدم:
- يُرجى التحقّق مما إذا كان رقم تعريف حساب Google (
sub) أو عنوان البريد الإلكتروني في رمز JWT يطابق مستخدمًا في قاعدة بياناتك.
- يُرجى التحقّق مما إذا كان رقم تعريف حساب Google (
الردّ:
- في حال العثور على حساب: يتم عرض رمز HTTP
200 OKمع{"account_found": "true"}. - في حال عدم العثور على حساب: يتم عرض رمز HTTP
404 Not Foundمع{"account_found": "false"}.
- في حال العثور على حساب: يتم عرض رمز HTTP
التعامل مع الربط التلقائي (الحصول على الغرض)
إذا كان الحساب موجودًا، تتصل Google بنقطة النهاية باستخدام intent=get لاسترداد الرموز المميزة. لمعرفة تفاصيل المَعلمات، يُرجى الاطّلاع على أغراض الربط المبسّط.
وصفة التنفيذ
للتعامل مع الغرض get، يُرجى اتّخاذ الإجراءات التالية:
التحقّق من صحة الطلب:
- التحقّق من
client_idوclient_secretوgrant_type - التحقّق من صحة
assertion(رمز JWT)
- التحقّق من
البحث عن المستخدم:
- التحقّق من وجود المستخدم باستخدام طلب
subأوemail
- التحقّق من وجود المستخدم باستخدام طلب
الردّ:
- في حال نجاح العملية: إنشاء
access_tokenوrefresh_tokenوexpires_inوعرضها في ردّ بتنسيق JSON (HTTP200 OK) - في حال تعذُّر الربط: عرض HTTP
401 Unauthorizedمع{"error": "linking_error"}وlogin_hintاختياري للرجوع إلى الربط العادي باستخدام OAuth
- في حال نجاح العملية: إنشاء
التعامل مع إنشاء الحسابات باستخدام ميزة "تسجيل الدخول باستخدام حساب Google" (نية الإنشاء)
إذا لم يكن هناك حساب، تتصل Google بنقطة النهاية مع intent=create لإنشاء مستخدم جديد. لمعرفة تفاصيل المعلّمات، يُرجى الاطّلاع على مقالة نوايا الربط المبسّطة.
وصفة التنفيذ
للتعامل مع نية create، يُرجى اتّخاذ الإجراءات التالية:
التحقّق من الطلب:
- التحقّق من
client_idوclient_secretوgrant_type - التحقّق من
assertion(رمز JWT)
- التحقّق من
التحقّق من عدم وجود المستخدم:
- التحقّق مما إذا كان
subأوemailموجودًا من قبل في قاعدة البيانات - إذا كان المستخدم موجودًا: يتم عرض الخطأ HTTP
401 Unauthorizedمع{"error": "linking_error", "login_hint": "USER_EMAIL"}لفرض الرجوع إلى الربط باستخدام بروتوكول OAuth.
- التحقّق مما إذا كان
إنشاء حساب:
- استخدام طلبات
subوemailوnameوpictureمن رمز JWT لإنشاء سجلّ مستخدم جديد
- استخدام طلبات
الردّ:
- إنشاء الرموز وإرجاعها في استجابة JSON (HTTP
200 OK)
- إنشاء الرموز وإرجاعها في استجابة JSON (HTTP
الحصول على معرّف عميل Google API
سيُطلب منك تقديم معرّف عميل Google API أثناء عملية التسجيل لربط الحساب. للحصول على معرّف عميل واجهة برمجة التطبيقات باستخدام المشروع الذي أنشأته أثناء إكمال خطوات ربط OAuth. لإجراء ذلك، يُرجى إكمال الخطوات التالية:
- انتقِل إلى صفحة العملاء.
أنشئ مشروعًا على Google APIs أو اختَر مشروعًا حاليًا.
إذا لم يكن مشروعك يتضمّن معرّف عميل من نوع تطبيق الويب، انقر على إنشاء عميل لإنشاء معرّف. تأكَّد من تضمين نطاق موقعك الإلكتروني في مربّع مصادر JavaScript المعتمَدة. عند إجراء اختبارات أو عمليات تطوير محلية، يجب إضافة كل من
http://localhostوhttp://localhost:<port_number>إلى حقل مصادر JavaScript المعتمَدة.
التحقّق من صحة عملية التنفيذ
يمكنك التحقّق من صحة التنفيذ باستخدام أداة مساحة بروتوكول OAuth 2.0.
في الأداة، اتّبِع الخطوات التالية:
- انقر على الإعداد لفتح نافذة "إعدادات OAuth 2.0".
- في حقل مسار OAuth، اختَر من جهة العميل.
- في حقل نقاط نهاية OAuth، اختَر مخصّص.
- حدِّد نقطة نهاية OAuth 2.0 ومعرّف العميل الذي خصّصته لـ Google في الحقلَين المناسبَين.
- في قسم الخطوة 1، لا تحدّد أي نطاقات Google. بدلاً من ذلك، اترك هذا الحقل فارغًا أو اكتب نطاقًا صالحًا لخادمك (أو سلسلة عشوائية إذا كنت لا تستخدم نطاقات OAuth). عند الانتهاء، انقر على تفويض واجهات برمجة التطبيقات.
- في القسمَين الخطوة 2 والخطوة 3، اتّبِع مسار OAuth 2.0 وتأكَّد من أنّ كل خطوة تعمل على النحو المطلوب.
يمكنك التحقّق من صحة عملية التنفيذ باستخدام أداة عرض توضيحي لربط حساب Google.
في الأداة، اتّبِع الخطوات التالية:
- انقر على الزر تسجيل الدخول باستخدام حساب Google.
- اختَر الحساب الذي تريد ربطه.
- أدخِل رقم تعريف الخدمة.
- يمكنك اختياريًا إدخال نطاق واحد أو أكثر ستطلب الوصول إليه.
- انقر على بدء العرض التوضيحي.
- أكِّد أنّه يمكنك الموافقة على طلب ربط الحساب ورفضه عندما يُطلب منك ذلك.
- تأكَّد من إعادة توجيهك إلى منصتك.