أثناء عملية التفويض، قد يعرض بروتوكول Google OAuth رسالة خطأ. استخدِم هذا الدليل لتحديد المشاكل وحلّها الأكثر شيوعًا أثناء هذه العملية.
تحديد المشاكل وحلّها
لمزيد من المعلومات حول Google OAuth، يُرجى الاطّلاع على استخدام بروتوكول OAuth 2.0 للدخول إلى واجهات Google APIs.
انتهاء صلاحية الرمز المميز لإعادة التحميل بشكل متكرر
قد تتوقف رموز التحديث عن العمل بعد 7 أيام إذا لم تتم الموافقة على معرّف العميل، وهذا أحد الأسباب المحتملة. لا يرتبط انتهاء صلاحية الرمز المميز بعد 7 أيام بموافقات الإصدار التجاري أو وضع الحماية. يجب الموافقة على معرّف عميل OAuth 2.0 لحساب خدمة أو حساب مستخدم وطرحه في مرحلة الإنتاج للحصول على فترات صلاحية أطول للرموز المميزة. يمكنك الاطّلاع على انتهاء صلاحية الرمز المميز لإعادة التحميل لمزيد من المعلومات.
تم رفض الوصول
إذا كنت قد أعددت شاشة طلب الموافقة المتعلّقة ببروتوكول OAuth في Google Cloud وكان نوع المستخدم هو خارجي، سيظهر لك الخطأ "تم رفض الوصول" إذا حاولت ربط الحساب بحساب Google غير مُدرَج كمستخدم اختباري لتطبيقك. احرص على إضافة حساب Google إلى قسم المستخدمون الاختباريون في شاشة طلب الموافقة المتعلّقة ببروتوكول OAuth.
خطأ في "إدارة إمكانية وصول الشركاء إلى الأجهزة الذكية"
للحصول على مساعدة بشأن أي أخطاء تواجهها عند الوصول إلى إدارة إمكانية وصول الشركاء إلى الأجهزة الذكية (PCM)، يُرجى الاطّلاع على مرجع أخطاء إدارة إمكانية وصول الشركاء إلى الأجهزة الذكية (PCM).
لم تتحقّق Google من هذا التطبيق
تستخدم واجهة برمجة التطبيقات SDM API نطاقًا محدودًا، ما يعني أنّ أي تطبيقات تستخدم هذا النطاق أثناء التفويض سيتم تصنيفها على أنّها "لم يتم التحقّق منها" ما لم يتم إكمال عملية التحقّق من واجهة برمجة تطبيقات OAuth. عند استخدام Device Access لأغراض شخصية، لا يلزم التحقّق من واجهة برمجة التطبيقات عبر OAuth.
قد تظهر لك شاشة "لم تتحقّق Google من هذا التطبيق" أثناء عملية منح الإذن، وتظهر هذه الشاشة إذا لم يتم ضبط النطاق sdm.service على شاشة طلب الموافقة على OAuth في Google Cloud. ويمكن تجاوز هذه الشاشة من خلال النقر على الخيار خيارات متقدمة ثم النقر على الانتقال إلى اسم المشروع (غير آمن).
يُرجى الاطّلاع على شاشة التطبيق الذي لم يتم التحقّق منه لمزيد من المعلومات.
عميل غير صالح
عند محاولة الحصول على رمز دخول أو رمز مميز لإعادة التحميل، سيظهر لك الخطأ "عميل غير صالح" إذا قدّمت سر عميل غير صحيح لبروتوكول OAuth 2.0. تأكَّد من أنّ قيمة client_secret التي تستخدمها في طلبات رموز الدخول ورموز إعادة التحميل هي نفسها قيمة معرّف العميل لبروتوكول OAuth 2.0 المستخدَم، كما هو موضّح في صفحة بيانات اعتماد Google Cloud.
طلب غير صالح، نطاق مطلوب غير متوفّر
بعد منح الأذونات في PCM، قد يظهر لك الخطأ "طلب غير صالح" مع الرسالة "المَعلمة المطلوبة غير متوفّرة: النطاق". تأكَّد من أنّ قيمة scope التي تستخدمها في طلبات منح الأذونات هي نفسها القيمة التي ضبطتها لعميل OAuth 2.0، كما هو موضّح في صفحة بيانات اعتماد Google Cloud.
عدم تطابق معرّف الموارد المنتظم (URI) الخاص بإعادة التوجيه
عند إجراء عملية التفويض، قد تواجه الخطأ "عنوان URI لإعادة التوجيه غير متطابق". تأكَّد من أنّ قيمة redirect_uri التي تستخدمها في طلبات التفويض هي نفسها القيمة التي ضبطتها لعميل OAuth 2.0، كما هو موضّح في صفحة بيانات الاعتماد في Google Cloud.
مرجع سريع
استخدِم هذا المرجع لتنفيذ الخطوات اللازمة لمنحuser الإذن وربط حسابك على Google بسرعة.
لاستخدام هذا المرجع السريع، عدِّل كل متغيّر عنصر نائب في نماذج الرموز باستخدام قيم عملية الدمج المحدّدة، ثم انسخها والصقها حسب الحاجة:
1 PCM
وجِّه user إلى رابط PCM في تطبيقك، مع استبدال ما يلي:
- project-id باستخدام Device Access Project معرّفك
- oauth2-client-id مع معرّف عميل OAuth2 من بيانات اعتماد Google Cloud
- redirect-uri مع تحديد معرّف الموارد المنتظم لإعادة التوجيه لمعرّف العميل OAuth2 الذي تستخدمه
- scope مع أحد نطاقاتك المتاحة
https://nestservices.google.com/partnerconnections/project-id/auth?redirect_uri=redirect-uri& access_type=offline& prompt=consent& client_id=oauth2-client-id& response_type=code& scope=https://www.googleapis.com/auth/scope
2 Auth Code
بعد منح الأذونات من خلال PCM للنطاق الذي اخترته، يجب إعادة توجيه user إلى معرّف الموارد المنتظم (URI) الذي حدّدته لإعادة التوجيه. يتم عرض رمز التفويض كالمَعلمة code في عنوان URL،
ويجب أن يكون بالتنسيق التالي:
redirect-uri?code=authorization-code&scope=https://www.googleapis.com/auth/scope
3 رمز الدخول
استخدِم رمز التفويض لاسترداد رمز دخول يمكنك استخدامه لاستدعاء واجهة برمجة تطبيقات SDM نيابةً عن المستخدم.
أرسِل طلب POST إلى نقطة نهاية OAuth من Google، مع استبدال ما يلي:
- oauth2-client-id وoauth2-client-secret باستخدام معرّف العميل وسر العميل في OAuth2 من بيانات اعتماد Google Cloud
- authorization-code باستخدام الرمز الذي تلقّيته في الخطوة السابقة
- redirect-uri مع تحديد معرّف الموارد المنتظم لإعادة التوجيه لمعرّف العميل OAuth2 الذي تستخدمه
تعرض خدمة Google OAuth رمزين مميزين، وهما رمز دخول ورمز مميز لإعادة التحميل.
طلب
curl -L -X POST 'https://www.googleapis.com/oauth2/v4/token?client_id=oauth2-client-id&client_secret=oauth2-client-secret&code=authorization-code&grant_type=authorization_code&redirect_uri=redirect-uri' الردّ
{
"access_token": "access-token",
"expires_in": 3599,
"refresh_token": "refresh-token",
"scope": "https://www.googleapis.com/auth/scope",
"token_type": "Bearer"
}4 طلب بيانات من واجهة برمجة التطبيقات
لن يكتمل التفويض إلا بعد إجراء طلب بيانات من واجهة برمجة التطبيقات باستخدام رمز الدخول الخاص بـ user. تُنهي هذه المكالمة الأولية عملية التفويض وتفعّل الأحداث.
يجب استخدام أحد طلبات البيانات من واجهة برمجة التطبيقات المدرَجة للنطاق المحدّد لإكمال عملية منح الإذن.
sdm.service
الأجهزة
لمزيد من المعلومات، يمكنك الاطّلاع على مرجع واجهة برمجة التطبيقات devices.list.
curl -X GET 'https://smartdevicemanagement.googleapis.com/v1/enterprises/project-id/devices' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer access-token'5 Refresh Token
تكون رموز الدخول إلى واجهة برمجة التطبيقات لمجموعة أدوات SDM صالحة لمدة ساعة واحدة فقط، كما هو موضّح في المَعلمة expires_in التي يعرضها بروتوكول OAuth من Google. وفي حال انتهاء صلاحية رمز الدخول، استخدِم الرمز المميز لإعادة التحميل للحصول على رمز جديد.
أرسِل طلب POST إلى نقطة نهاية OAuth من Google، مع استبدال ما يلي:
- oauth2-client-id وoauth2-client-secret باستخدام معرّف العميل وسر العميل في OAuth2 من بيانات اعتماد Google Cloud
- refresh-token باستخدام الرمز الذي تلقّيته عند الحصول على رمز الدخول في البداية.
يعرض Google OAuth رمز دخول جديدًا.
طلب
curl -L -X POST 'https://www.googleapis.com/oauth2/v4/token?client_id=oauth2-client-id&client_secret=oauth2-client-secret&refresh_token=refresh-token&grant_type=refresh_token' الردّ
{
"access_token": "new-access-token",
"expires_in": 3599,
"scope": "https://www.googleapis.com/auth/scope",
"token_type": "Bearer"
}