يجب أن يتضمّن كل تكامل مع Cloud-to-cloud آلية لمصادقة المستخدمين.
تتيح لك المصادقة ربط حسابات المستخدمين على Google بحسابات المستخدمين في نظام المصادقة. يتيح لك ذلك تحديد هوية المستخدمين عندما يتلقّى تنفيذ الطلب طلبًا من المنزل المزوّد بأجهزة ذكية. لا يتيح برنامج "المنزل الذكي من Google" استخدام بروتوكول OAuth إلا مع مسار رمز التفويض.
توضّح هذه الصفحة كيفية إعداد خادم OAuth 2.0 لكي يعمل مع عملية الدمج في Cloud-to-cloud.
ربط حساب Google باستخدام OAuth
في مسار رمز التفويض، تحتاج إلى نقطتَي نهاية:
نقطة نهاية التفويض التي تعرض واجهة مستخدم تسجيل الدخول للمستخدمين الذين لم يسجّلوا الدخول بعد تنشئ نقطة نهاية التفويض أيضًا رمز تفويض قصير الأمد لتسجيل موافقة المستخدمين على الوصول المطلوب.
نقطة نهاية تبادل الرموز المميزة، وهي مسؤولة عن نوعَين من عمليات التبادل:
- يستبدل رمز التفويض برمز مميز طويل الأمد لإعادة التحميل ورمز دخول قصير الأمد. تحدث عملية التبادل هذه عندما يمرّ المستخدم بمسار ربط الحساب.
- يستبدل الرمز المميز لإعادة التحميل طويل الأمد برمز دخول قصير الأمد. تحدث عملية التبادل هذه عندما تحتاج Google إلى رمز دخول مميز جديد لأنّ الرمز الذي كان لديها قد انتهت صلاحيته.
إرشادات التصميم
يوضّح هذا القسم متطلبات التصميم واقتراحات بشأن شاشة المستخدم التي تستضيفها لعمليات ربط حسابات OAuth. بعد أن يطلب تطبيق Google ذلك، تعرض منصتك للمستخدم صفحة تسجيل الدخول إلى Google وشاشة الموافقة على ربط الحساب. يتم توجيه المستخدم مرة أخرى إلى تطبيق Google بعد منح موافقته على ربط الحسابات.
المتطلبات
- يجب توضيح أنّه سيتم ربط حساب المستخدم بحساب على Google، وليس بمنتج معيّن من منتجات Google، مثل Google Home أو "مساعد Google".
- يجب أن يتضمّن التطبيق بيان تفويض من Google، مثل "من خلال تسجيل الدخول، أنت تمنح Google الإذن بالتحكّم في أجهزتك". يُرجى الاطّلاع على قسم تفويض التحكّم في أجهزة Google ضمن سياسات المطوّرين في Google Home.
- يجب فتح صفحة ربط Web OAuth والتأكّد من توفّر طريقة واضحة للمستخدمين لتسجيل الدخول إلى حساب Google، مثل حقول اسم المستخدم وكلمة المرور. لا تستخدِم طريقة "تسجيل الدخول باستخدام حساب Google" (GSI) التي تتيح للمستخدمين الربط بدون الانتقال إلى صفحة ربط حسابات OAuth على الويب. ويشكّل ذلك انتهاكًا لسياسة Google.
- يجب تضمين عنصر واحد على الأقل من العناصر التالية في صفحة ربط حساب OAuth للإشارة إلى عملية الدمج التي يربط المستخدم حسابه بها:
- شعار الشركة
- اسم الشركة
- اسم عملية الدمج
- رمز التطبيق
الاقتراحات
ننصحك باتّخاذ الإجراءات التالية:
عرض سياسة خصوصية Google تضمين رابط يؤدي إلى سياسة خصوصية Google في شاشة طلب الموافقة
البيانات التي ستتم مشاركتها استخدِم لغة واضحة وموجزة لإخبار المستخدمين بالبيانات التي تطلبها Google منهم والغرض من ذلك، وببيانات الاستخدام أو التفاعل التي قد تشاركها Google معك.
عبارة واضحة تحثّ على اتّخاذ إجراء: يجب تضمين عبارة واضحة تحثّ على اتّخاذ إجراء في شاشة الموافقة، مثل "الموافقة والربط"، لأنّ المستخدمين بحاجة إلى فهم البيانات التي يُطلب منهم مشاركتها مع Google لربط حساباتهم.
إمكانية الإلغاء: توفير طريقة للمستخدمين للرجوع أو الإلغاء إذا اختاروا عدم الربط
عملية تسجيل دخول واضحة: تأكَّد من توفير طريقة واضحة للمستخدمين لتسجيل الدخول إلى حساباتهم على Google، مثل حقول اسم المستخدم وكلمة المرور أو تسجيل الدخول باستخدام حساب Google.
إمكانية إلغاء الربط: توفير آلية للمستخدمين لإلغاء الربط، مثل عنوان URL يؤدي إلى إعدادات حساباتهم على منصتك بدلاً من ذلك، يمكنك تضمين رابط يؤدي إلى حساب Google حيث يمكن للمستخدمين إدارة حساباتهم المرتبطة. إذا ألغى المستخدم ربط حسابه بعملية الدمج، استخدِم
agentUsers.deleteلإبلاغ Google بالتغيير.إمكانية تغيير حساب المستخدم اقترِح طريقة تتيح للمستخدمين التبديل بين حساباتهم. ويكون ذلك مفيدًا بشكل خاص إذا كان المستخدمون يميلون إلى امتلاك حسابات متعدّدة.
- إذا كان على المستخدم إغلاق شاشة طلب الموافقة للتبديل بين الحسابات، أرسِل خطأ قابلاً للاسترداد إلى Google ليتمكّن المستخدم من تسجيل الدخول إلى الحساب المطلوب باستخدام ربط الحسابات عبر OAuth.
تضمين شعارك: عرض شعار شركتك على شاشة طلب الموافقة استخدِم إرشادات الأسلوب لتحديد موضع شعارك. إذا كنت تريد عرض شعار Google أيضًا، يُرجى الاطّلاع على الشعارات والعلامات التجارية.
مسار رمز التفويض
يتكوّن تنفيذ خادم OAuth 2.0 لمسار رمز التفويض من نقطتَي نهاية توفّرهما خدمتك من خلال بروتوكول HTTPS. نقطة النهاية الأولى هي نقطة نهاية التفويض، وهي المسؤولة عن العثور على موافقة المستخدمين أو الحصول عليها للوصول إلى البيانات. تعرض نقطة نهاية التفويض واجهة مستخدم لتسجيل الدخول للمستخدمين الذين لم يسجّلوا الدخول بعد، وتسجّل موافقتهم على الوصول المطلوب. نقطة النهاية الثانية هي نقطة نهاية تبادل الرموز المميّزة، والتي تُستخدم للحصول على سلاسل مشفّرة، تُسمى الرموز المميّزة، والتي تسمح للمستخدم بالوصول إلى خدمتك.
عندما يحتاج تطبيق Google إلى طلب إحدى واجهات برمجة التطبيقات الخاصة بخدمتك، تستخدم Google نقاط النهاية هذه معًا للحصول على إذن من المستخدمين لطلب واجهات برمجة التطبيقات هذه نيابةً عنهم.
يتّبع مسار رمز التفويض OAuth 2.0 الذي تبدأه Google الخطوات التالية:
- يفتح Google نقطة نهاية التفويض في متصفّح المستخدم. إذا بدأ الإجراء على جهاز صوتي فقط، تنقل Google عملية التنفيذ إلى هاتف.
- يسجّل المستخدم الدخول، إذا لم يكن قد سجّل الدخول من قبل، ويمنح Google الإذن بالوصول إلى بياناته باستخدام واجهة برمجة التطبيقات، إذا لم يسبق له منح الإذن.
- تنشئ الخدمة رمز تفويض وتعيده إلى Google. ولإجراء ذلك، عليك إعادة توجيه متصفّح المستخدم إلى Google مع إرفاق رمز التفويض بالطلب.
- ترسل Google رمز التفويض إلى نقطة نهاية تبادل الرموز المميزة، والتي تتحقق من صحة الرمز وتعرض رمز الدخول والرمز المميز لإعادة التحميل. رمز الدخول هو رمز مميّز قصير الأجل تقبله خدمتك كبيانات اعتماد للوصول إلى واجهات برمجة التطبيقات. الرمز المميز لإعادة التحميل هو رمز مميز طويل الأجل يمكن لـ Google تخزينه واستخدامه للحصول على رموز الدخول الجديدة عند انتهاء صلاحيتها.
- بعد أن يكمل المستخدم عملية ربط الحساب، سيتضمّن كل طلب لاحق ترسله Google رمز دخول.
التعامل مع طلبات التفويض
عندما تحتاج إلى ربط الحساب باستخدام مسار رمز التفويض OAuth 2.0، ترسل Google المستخدم إلى نقطة نهاية التفويض مع طلب يتضمّن المَعلمات التالية:
| مَعلمات نقطة نهاية التفويض | |
|---|---|
client_id |
معرِّف العميل الذي عيّنته لـ Google. |
redirect_uri |
عنوان URL الذي ترسل إليه الردّ على هذا الطلب. |
state |
قيمة محاسبية يتم إرسالها مرة أخرى إلى Google بدون تغيير في معرّف الموارد المنتظم (URI) الخاص بإعادة التوجيه. |
scope |
اختياري: مجموعة من سلاسل النطاقات مفصولة بمسافات تحدّد البيانات التي تطلب Google الحصول على إذن بالوصول إليها. |
response_type |
نوع القيمة المطلوب عرضها في الردّ بالنسبة إلى مسار رمز التفويض في بروتوكول OAuth 2.0، يكون نوع الاستجابة دائمًا code.
|
على سبيل المثال، إذا كانت نقطة نهاية التفويض متاحة على
https://myservice.example.com/auth، قد يبدو الطلب على النحو التالي:
GET https://myservice.example.com/auth?client_id=GOOGLE_CLIENT_ID&redirect_uri=REDIRECT_URI&state=STATE_STRING&scope=REQUESTED_SCOPES&response_type=code
لكي تتمكّن نقطة نهاية التفويض من معالجة طلبات تسجيل الدخول، اتّبِع الخطوات التالية:
- تأكَّد من أنّ
client_idيتطابق مع معرّف العميل الذي عيّنته لـ Google، ومن أنّredirect_uriيتطابق مع عنوان URL لإعادة التوجيه الذي قدّمته Google لخدمتك. هذه الفحوصات مهمة لمنع منح إذن الوصول إلى تطبيقات العملاء غير المقصودة أو التي تم ضبطها بشكل خاطئ. إذا كانت عملياتك تتيح استخدام عدة مسارات لبروتوكول OAuth 2.0، يُرجى أيضًا التأكّد من أنّresponse_typeهوcode. - تحقَّق مما إذا كان المستخدم قد سجّل الدخول إلى خدمتك. إذا لم يسجّل المستخدم الدخول، أكمِل عملية تسجيل الدخول أو الاشتراك في الخدمة.
- أنشِئ رمز تفويض لتستخدمه Google للوصول إلى واجهة برمجة التطبيقات. يمكن أن يكون رمز التفويض أي قيمة سلسلة، ولكن يجب أن يمثّل بشكل فريد المستخدم والعميل الذي تم إنشاء الرمز المميّز له ووقت انتهاء صلاحية الرمز، ويجب ألا يكون قابلاً للتخمين. عادةً ما تصدر رموز تفويض تنتهي صلاحيتها بعد 10 دقائق تقريبًا.
- تأكَّد من أنّ عنوان URL المحدّد في المَعلمة
redirect_uriيتّخذ الشكل التالي:https://oauth-redirect.googleusercontent.com/r/YOUR_PROJECT_ID https://oauth-redirect-sandbox.googleusercontent.com/r/YOUR_PROJECT_ID
- أعِد توجيه متصفّح المستخدم إلى عنوان URL المحدّد في المَعلمة
redirect_uri. يجب تضمين رمز التفويض الذي أنشأته للتو وقيمة الحالة الأصلية غير المعدَّلة عند إعادة التوجيه من خلال إلحاق المَعلمتَينcodeوstate. في ما يلي مثال على عنوان URL الناتج:https://oauth-redirect.googleusercontent.com/r/YOUR_PROJECT_ID?code=AUTHORIZATION_CODE&state=STATE_STRING
التعامل مع طلبات تبادل الرموز المميّزة
تكون نقطة نهاية تبادل الرموز المميّزة في الخدمة مسؤولة عن نوعَين من عمليات تبادل الرموز المميّزة:
- استبدال رموز التفويض برموز الدخول والرموز المميزة لإعادة التحميل
- استبدال الرموز المميزة لإعادة التحميل برموز الدخول
تتضمّن طلبات تبادل الرموز المميّزة المَعلمات التالية:
| مَعلمات نقطة نهاية تبادل الرموز المميّزة | |
|---|---|
client_id |
سلسلة تحدّد مصدر الطلب على أنّه Google. يجب تسجيل هذه السلسلة في نظامك كمعرّف فريد لـ Google. |
client_secret |
هي سلسلة سرية سجّلتها في Google لخدمتك. |
grant_type |
نوع الرمز المميّز الذي يتم تبادله ويجب استخدام إما authorization_code أو refresh_token. |
code |
عندما تكون قيمة المَعلمة grant_type=authorization_code، تكون هذه المَعلمة هي الرمز الذي تلقّته Google من نقطة نهاية تسجيل الدخول أو نقطة نهاية تبادل الرموز المميّزة. |
redirect_uri |
عندما تكون قيمة المَعلمة grant_type=authorization_code، تكون هذه المَعلمة هي عنوان URL المستخدَم في طلب التفويض الأولي. |
refresh_token |
عندما تكون قيمة المَعلمة grant_type=refresh_token، تكون هذه المَعلمة هي الرمز المميز لإعادة التحميل الذي تلقّته Google من نقطة نهاية تبادل الرموز المميزة. |
ضبط كيفية إرسال Google لبيانات الاعتماد إلى خادمك
بناءً على طريقة التنفيذ، يتوقّع خادم التفويض تلقّي بيانات اعتماد العميل إما في نص الطلب أو في عنوان الطلب.
وفقًا للإعدادات التلقائية، ترسل Google بيانات الاعتماد في نص الطلب. إذا كان خادم التفويض يتطلّب تضمين بيانات اعتماد العميل في عنوان الطلب، عليك ضبط عملية دمج "Cloud-to-cloud" وفقًا لذلك:
الانتقال إلى Developer Console
من قائمة المشاريع، انقر على فتح بجانب المشروع الذي تريد العمل عليه.
ضمن من السحابة الإلكترونية إلى السحابة الإلكترونية، اختَر تطوير.
انقر على فتح بجانب عملية الدمج.
انتقِل للأسفل إلى قسم الأذونات (اختياري) وضَع علامة في مربّع الاختيار السماح لـ Google بنقل معرّف العميل وسرّه عبر عنوان المصادقة الأساسية لبروتوكول HTTP.
انقر على حفظ لحفظ التغييرات.
استبدال رموز التفويض برموز الدخول والرموز المميزة لإعادة التحميل
بعد أن يسجّل المستخدم الدخول وتُرجع نقطة نهاية التفويض رمز تفويض قصير الأجل إلى Google، ترسل Google طلبًا إلى نقطة نهاية تبادل الرموز المميزة لتبادل رمز التفويض برمز مميز للدخول ورمز مميز لإعادة التحميل.
بالنسبة إلى هذه الطلبات، تكون قيمة grant_type هي authorization_code، وقيمة code هي قيمة رمز التفويض الذي منحته سابقًا إلى Google. في ما يلي مثال على طلب تبديل رمز التفويض برمز مميز للدخول ورمز مميز لإعادة التحميل:
POST /token HTTP/1.1 Host: oauth2.example.com Content-Type: application/x-www-form-urlencoded client_id=GOOGLE_CLIENT_ID&client_secret=GOOGLE_CLIENT_SECRET&grant_type=authorization_code&code=AUTHORIZATION_CODE&redirect_uri=REDIRECT_URI
لتبديل رموز التفويض برمز دخول ورمز مميز لإعادة التحميل، تستجيب نقطة نهاية تبديل الرموز المميزة لطلبات POST من خلال تنفيذ الخطوات التالية:
- تأكَّد من أنّ
client_idيحدّد مصدر الطلب على أنّه مصدر معتمَد، ومن أنّclient_secretيتطابق مع القيمة المتوقّعة. - يُرجى التأكّد من أنّ رمز التفويض صالح وغير منتهي الصلاحية، ومن أنّ معرِّف العميل المحدّد في الطلب يتطابق مع معرِّف العميل المرتبط برمز التفويض.
- يُرجى التأكّد من أنّ عنوان URL المحدّد في المَعلمة
redirect_uriمطابق للقيمة المستخدَمة في طلب التفويض الأولي. - إذا لم تتمكّن من التحقّق من جميع المعايير المذكورة أعلاه، يمكنك عرض خطأ HTTP
400 Bad Request مع
{"error": "invalid_grant"}كنص. - وإلا، استخدِم رقم تعريف المستخدم من رمز التفويض لإنشاء رمز مميّز لإعادة التحميل ورمز مميّز للوصول. يمكن أن تكون هذه الرموز المميّزة أي قيمة سلسلة، ولكن يجب أن تمثّل بشكل فريد المستخدم والعميل الذي تم إنشاء الرمز المميّز له، ويجب ألا تكون قابلة للتخمين. بالنسبة إلى رموز الدخول، سجِّل أيضًا وقت انتهاء صلاحية الرمز، والذي يكون عادةً بعد ساعة من إصدار الرمز. لا تنتهي صلاحية الرموز المميّزة لإعادة التحميل.
- يجب عرض عنصر JSON التالي في نص استجابة HTTPS:
{ "token_type": "Bearer", "access_token": "ACCESS_TOKEN", "refresh_token": "REFRESH_TOKEN", "expires_in": SECONDS_TO_EXPIRATION }
تخزّن Google الرمز المميز للوصول والرمز المميز لإعادة التحميل للمستخدم وتسجّل انتهاء صلاحية الرمز المميز للوصول. عند انتهاء صلاحية رمز الدخول، تستخدم Google الرمز المميز لإعادة التحميل للحصول على رمز دخول جديد من نقطة نهاية تبادل الرموز المميزة.
استبدال الرموز المميزة لإعادة التحميل برموز الدخول
عند انتهاء صلاحية رمز الدخول، ترسل Google طلبًا إلى نقطة نهاية تبادل الرموز المميزة لاستبدال رمز مميز لإعادة التحميل برمز دخول جديد.
بالنسبة إلى هذه الطلبات، تكون قيمة grant_type هي refresh_token، وقيمة refresh_token هي قيمة الرمز المميز لإعادة التحميل الذي منحته سابقًا إلى Google. في ما يلي مثال على طلب استبدال رمز مميز لإعادة التحميل
برمز دخول:
POST /token HTTP/1.1 Host: oauth2.example.com Content-Type: application/x-www-form-urlencoded client_id=GOOGLE_CLIENT_ID&client_secret=GOOGLE_CLIENT_SECRET&grant_type=refresh_token&refresh_token=REFRESH_TOKEN
لاستبدال رمز مميّز لإعادة التحميل برمز مميّز للوصول، تستجيب نقطة نهاية تبادل الرموز المميّزة لطلبات POST من خلال تنفيذ الخطوات التالية:
- تأكَّد من أنّ
client_idيحدّد مصدر الطلب على أنّه Google، ومن أنّclient_secretيتطابق مع القيمة المتوقّعة. - يُرجى التحقّق من صلاحية الرمز المميّز لإعادة التحميل، ومن أنّ معرّف العميل المحدّد في الطلب يتطابق مع معرّف العميل المرتبط بالرمز المميّز لإعادة التحميل.
- إذا لم تتمكّن من التحقّق من جميع المعايير المذكورة أعلاه، يمكنك عرض رمز الخطأ HTTP 400
Bad Request مع
{"error": "invalid_grant"}كنص. - وإلا، يمكنك استخدام رقم تعريف المستخدم من الرمز المميز لإعادة التحميل لإنشاء رمز مميز للوصول. يمكن أن تكون هذه الرموز المميزة أي قيمة سلسلة، ولكن يجب أن تمثل بشكل فريد المستخدم والعميل الذي يمثله الرمز المميز، ويجب ألا تكون قابلة للتخمين. بالنسبة إلى رموز الدخول، سجِّل أيضًا وقت انتهاء صلاحية الرمز، والذي يكون عادةً بعد ساعة من إصدار الرمز.
- يجب عرض عنصر JSON التالي في نص استجابة HTTPS:
{ "token_type": "Bearer", "access_token": "ACCESS_TOKEN", "expires_in": SECONDS_TO_EXPIRATION }
التعامل مع طلبات معلومات المستخدم
نقطة نهاية userinfo هي مورد OAuth 2.0 محمي يعرض مطالبات بشأن المستخدم المرتبط. يُعد تنفيذ نقطة نهاية userinfo واستضافتها اختياريًا، باستثناء حالات الاستخدام التالية:
- تسجيل الدخول إلى حساب مرتبط باستخدام Google One Tap.
- اشتراك سلس على AndroidTV.
بعد استرداد رمز الدخول بنجاح من نقطة نهاية الرمز المميّز، ترسل Google طلبًا إلى نقطة نهاية معلومات المستخدم لاسترداد معلومات الملف الشخصي الأساسية عن المستخدم المرتبط.
| عناوين طلبات نقطة نهاية userinfo | |
|---|---|
Authorization header |
رمز الدخول من النوع "الحامل". |
على سبيل المثال، إذا كانت نقطة نهاية userinfo متاحة على
https://myservice.example.com/userinfo، قد يظهر الطلب على النحو التالي:
GET /userinfo HTTP/1.1 Host: myservice.example.com Authorization: Bearer ACCESS_TOKEN
لتتمكّن نقطة نهاية معلومات المستخدم من معالجة الطلبات، عليك اتّباع الخطوات التالية:
- يمكنك استخراج رمز الدخول من عنوان التفويض ومعلومات الإرجاع للمستخدم المرتبط برمز الدخول.
- إذا كان رمز الدخول غير صالح، يمكنك عرض الخطأ HTTP 401 "غير مصرح به" مع استخدام عنوان الاستجابة
WWW-Authenticate. في ما يلي مثال على استجابة خطأ في معلومات المستخدم: إذا تم عرض رسالة الخطأ 401 "غير مصرّح به" أو أي استجابة أخرى غير ناجحة للخطأ أثناء عملية الربط، لن تتمكّن من استرداد الخطأ، وسيتم تجاهل الرمز المميّز الذي تم استرداده وسيضطر المستخدم إلى بدء عملية الربط مرة أخرى.HTTP/1.1 401 Unauthorized WWW-Authenticate: error="invalid_token", error_description="The Access Token expired"
إذا كان رمز الدخول صالحًا، يتم عرض الاستجابة HTTP 200 مع كائن JSON التالي في نص HTTPS. الرد:
إذا عرضت نقطة نهاية معلومات المستخدم استجابة نجاح HTTP 200، يتم تسجيل الرمز المميز الذي تم استرداده والمطالبات مقابل حساب المستخدم على Google.{ "sub": "USER_UUID", "email": "EMAIL_ADDRESS", "given_name": "FIRST_NAME", "family_name": "LAST_NAME", "name": "FULL_NAME", "picture": "PROFILE_PICTURE", }استجابة نقطة نهاية لمعلومات المستخدم subمعرّف فريد يعرّف المستخدِم في نظامك. emailعنوان البريد الإلكتروني للمستخدم. given_nameاختياري: الاسم الأول للمستخدم. family_nameاختياري: اسم العائلة للمستخدم. nameاختياري: اسم المستخدم الكامل. pictureاختياري: صورة الملف الشخصي للمستخدم.