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

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

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

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

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

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

تم رفض الوصول

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

خطأ في "إدارة إمكانية وصول الشركاء إلى الأجهزة الذكية" (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) لإعادة التوجيه

عند إجراء عملية التفويض، قد تواجه خطأ "عدم تطابق عنوان URL لإعادة التوجيه". تأكَّد من أنّ قيمة 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 مع معرّف مصدر الموارد المؤقت لإعادة التوجيه محدّدًا لملف معرّف عميل 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 API نيابةً عن المستخدم.

أجرِ طلب POST إلى نقطة نهاية OAuth في Google، مع استبدال:

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

تكون رموز الوصول إلى واجهة برمجة التطبيقات لمجموعة أدوات SDM válida لمدة ساعة واحدة فقط، كما هو موضّح في المَعلمة 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"
}