أخطاء التفويض

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

تحديد المشاكل وحلّها

لمعرفة المزيد من المعلومات عن Google OAuth، يُرجى الاطّلاع على استخدام OAuth 2.0 للوصول إلى Google APIs.

انتهاء صلاحية الرمز المميز لإعادة التحميل

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

تم رفض الوصول

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

خطأ في مدير اتصالات الشركاء (PCM)

للحصول على مساعدة بشأن أي أخطاء حدثت عند الوصول إلى PCM، يُرجى الاطّلاع على مرجع الخطأ في مدير اتصالات الشركاء (PCM).

لم تتحقّق Google من هذا التطبيق.

تستخدم واجهة برمجة تطبيقات SDM نطاقًا مشروطًا، ما يعني أنّ أي تطبيقات تستخدم هذا النطاق أثناء التفويض ستكون "غير مُتحقَّق منها" ما لم يتم إكمال عملية التحقّق من واجهة برمجة تطبيقات 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 في تطبيقك، مع استبدال:

  1. project-id باستخدام Device Access Project المعرّف الخاص بك
  2. oauth2-client-id باستخدام معرّف عميل OAuth2 من بيانات اعتماد Google Cloud
  3. redirect-uri باستخدام معرّف الموارد المنتظم (URI) لإعادة التوجيه المحدَّد لمعرّف عميل OAuth2 الذي تستخدمه
  4. 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 رمز المصادقة

بعد منح الأذونات من خلال PCM للنطاق المحدّد، يجب إعادة توجيه user إلى معرّف الموارد المنتظم (URI) الخاص بإعادة التوجيه. يتم عرض رمز التفويض كمَعلمة code في عنوان URL الذي يجب أن يكون بهذا التنسيق:

redirect-uri?code=authorization-code&scope=https://www.googleapis.com/auth/scope

3 رمز دخول مميز

استخدِم رمز التفويض لاسترداد رمز دخول يمكنك استخدامه لطلب بيانات واجهة برمجة تطبيقات SDM نيابةً عن المستخدم.

يمكنك إجراء طلب POST إلى نقطة نهاية OAuth من Google مع استبدال:

  1. oauth2-client-id وoauth2-client-secret مع معرّف عميل OAuth2 وسر العميل من بيانات اعتماد Google Cloud
  2. authorization-code باستخدام الرمز الذي تلقّيته في الخطوة السابقة
  3. redirect-uri باستخدام معرّف الموارد المنتظم (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 الرمز المميز لإعادة التحميل

تكون رموز الدخول لواجهة برمجة تطبيقات SDM صالحة لمدة ساعة واحدة فقط، كما هو موضّح في المَعلمة expires_in التي يعرضها Google OAuth. في حال انتهاء صلاحية رمز الدخول، استخدِم الرمز المميّز لإعادة التحميل للحصول على رمز جديد.

يمكنك إجراء طلب POST إلى نقطة نهاية OAuth من Google مع استبدال:

  1. oauth2-client-id وoauth2-client-secret مع معرّف عميل OAuth2 وسر العميل من بيانات اعتماد Google Cloud
  2. 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"
}