نظرة عامة
في 16 شباط (فبراير) 2022، تم الإعلان عن خطط لجعل تفاعلات Google OAuth أكثر أمانًا من خلال استخدام مسارات OAuth أكثر أمانًا. يساعدك هذا الدليل على فهم التغييرات اللازمة والخطوات اللازمة لنقل البيانات بنجاح من مسار عنوان IP العكسي إلى البدائل المتوافقة.
وتُعدّ هذه الجهود إجراء وقائي ضد التصيّد الاحتيالي وهجمات انتحال هوية التطبيقات أثناء التفاعل مع نقاط نهاية تفويض OAuth 2.0 في Google.
ما هو مسار عنوان IP الاستماع إلى صوتك؟
يتيح مسار عنوان IP الاستماع إلى صوتك استخدام عنوان IP استرجاع أوlocalhost
كمكوّن مضيف لمعرّف الموارد المنتظم (URI) الخاص بإعادة التوجيه حيث
يتم إرسال بيانات الاعتماد إلى المستخدم بعد أن يوافق على طلب موافقة OAuth. وتتعرض هذه التدفقة
لهجمات
الرجل في الوسط
حيث قد ينفّذ تطبيق شنيع، يصل إلى واجهة العودة نفسها على بعض
أنظمة التشغيل، استجابات الاستجابة من خادم التفويض إلى
معرّف الموارد المنتظم (URI) الخاص بإعادة التوجيه المحدّد، ويحصل على إمكانية الوصول إلى رمز التفويض.
سيتم إيقاف مسار عنوان IP المتوقّف لأنواع برامج iOS الأصلية وAndroid وChrome OAuth، ولكننا سنواصل إتاحة هذه الميزة على التطبيقات المتوافقة مع أجهزة كمبيوتر سطح المكتب.
تواريخ الامتثال الرئيسية
- 14 آذار (مارس) 2022: تم حظر عملاء OAuth الجدد من استخدام مسار عنوان IP الخاص بتكرار الاستماع.
- 1 آب (أغسطس) 2022: قد يتم عرض رسالة تحذير تظهر للمستخدم على طلبات OAuth غير المتوافقة.
- 31 آب (أغسطس) 2022: تم حظر مسار عنوان IP للردّ التلقائي على عملاء Android الأصليين وتطبيق Chrome وبروتوكول OAuth الذي تم إنشاؤه قبل 14 آذار (مارس) 2022.
- 21 تشرين الأول (أكتوبر) 2022: يتم حظر جميع العملاء الحاليين (بما في ذلك العملاء المعفاة). يمكن للعملاء طلب تمديد لمرة واحدة لمواصلة استخدام مسار عنوان IP الاستماع إلى طلبات حتى 21 تشرين الأول (أكتوبر) 2022، على النحو الموضّح في الرسالة الإلكترونية المُرسَلة إلى العملاء المتأثرين.
قد تظهر رسالة تحذير للمستخدم بسبب الطلبات غير المتوافقة قبل شهر واحد، أي 1 آب (أغسطس) 2022، تم إيقاف مسار عنوان IP الاستماع إلى العميل بشكلٍ كامل. تنقل الرسالة المستخدمين إلى أنه قد يتم حظر التطبيق قريبًا أثناء عرض رسالة الدعم الإلكترونية التي سجّلتها في شاشة موافقة OAuth في وحدة تحكّم Google API.
يمكنك التعرّف على رسالة التحذير التي تظهر للمستخدم وإيقافه من خلال إدخال معلَمة طلب بحث في طلب التفويض كما هو موضّح أدناه.- انتقِل إلى الرمز في تطبيقك الذي ترسل الطلبات إلى نقطة نهاية تفويض OAuth 2.0 من Google.
-
أضِف معلَمة
ack_loopback_shutdown
مع قيمة تاريخ التنفيذ: 2022-08-31 إلى طلب مسار إعادة التوجيه. مثال:ack_loopback_shutdown=2022-08-31
- حدِّد ما إذا كنت متأثرًا بالمشكلة.
- نقل البيانات إلى بديل متوافق في حال تأثّرك بهذه المشكلة
تحديد ما إذا كنت متأثرًا بالمشكلة
مراجعة نوع معرِّف عميل OAuth
انتقِل إلى Credentials page من Google API Console وعرض نوع معرّف عميل OAuth ضمن قسم معرّفات عميل OAuth 2.0. وسيكون أيًا مما يلي: تطبيق ويب أو Android أو iOS أو Universal Windows Platform (UWP) أو تطبيق Chrome أو أجهزة التلفزيون وأجهزة الإدخال المحدودة تطبيق جهاز كمبيوتر سطح المكتب.
يمكنك المتابعة إلى الخطوة التالية إذا كان نوع العميل الخاص بك هو Android أو تطبيق Chrome أو iOS وكنت تستخدم مسار عنوان IP العكسي.
ليس عليك اتخاذ أي إجراء يتعلّق بعملية الإيقاف هذه إذا كنت تستخدم مسار عنوان IP المتوقّع في برنامج OAuth لتطبيق سطح المكتب لأنّ استخدامه مع نوع عميل OAuth سيظل متاحًا.
كيفية تحديد ما إذا كان تطبيقك يستخدم مسار عنوان IP لميزة الاستماع إلى صوتك
افحص رمز تطبيقك أو مكالمة الشبكة الصادرة (في حال استخدام تطبيقك مكتبة OAuth) لتحديد ما إذا كان طلب التفويض من Google OAuth يستخدم تطبيقك قيم معرّف الموارد المنتظم (URI) لإعادة التوجيه.
فحص رمز التطبيق
redirect_uri
تحتوي على أيٍّ من
القيم التالية:
-
redirect_uri=http://127.0.0.1:<port>
على سبيل المثال:redirect_uri=http://127.0.0.1:3000
-
redirect_uri=http://[::1]:<port>
على سبيل المثال:redirect_uri=http://[::1]:3000
-
redirect_uri=http://localhost:<port>
على سبيل المثال:redirect_uri=http://localhost:3000
https://accounts.google.com/o/oauth2/v2/auth? redirect_uri=http://localhost:3000& response_type=code& scope=<SCOPES>& state=<STATE>& client_id=<CLIENT_ID>
فحص المكالمات الصادرة عبر الشبكة
- تطبيق الويب - فحص نشاط الشبكة على Chrome
- Android: فحص حركة بيانات الشبكة باستخدام أداة فحص الشبكة
-
تطبيقات Chrome
- انتقِل إلى صفحة إضافات Chrome.
- ضَع علامة في مربّع الاختيار وضع مطوّر البرامج في أعلى يسار صفحة الإضافة.
- اختَر الإضافة التي تريد مراقبتها.
- انقر على الرابط صفحة الخلفية في القسم فحص طرق العرض من صفحة الإضافة.
- سيتم فتح نافذة منبثقة بشأن أدوات المطوّرين حيث يمكنك مراقبة حركة بيانات الشبكة في علامة التبويب الشبكة.
- iOS - تحليل زيارات HTTP باستخدام الأدوات
- Universal Windows Platform (UWP) - فحص حركة بيانات الشبكة في Visual Studio
- تطبيقات الكمبيوتر المكتبي - استخدام أداة التقاط الشبكة المتاحة لنظام التشغيل الذي تم تطوير التطبيق من أجله
redirect_uri
تحتوي على أي من القيم التالية:
-
redirect_uri=http://127.0.0.1:<port>
على سبيل المثال:redirect_uri=http://127.0.0.1:3000
-
redirect_uri=http://[::1]:<port>
على سبيل المثال:redirect_uri=http://[::1]:3000
-
redirect_uri=http://localhost:<port>
على سبيل المثال:redirect_uri=http://localhost:3000
https://accounts.google.com/o/oauth2/v2/auth? redirect_uri=http://localhost:3000& response_type=code& scope=<SCOPES>& state=<STATE>& client_id=<CLIENT_ID>
نقل البيانات إلى خيار بديل متوافق
برامج الأجهزة الجوّالة (Android / iOS)
إذا تبيّن لك أنّ تطبيقك يستخدم مسار عنوان IP المتوقّع مع نوع عميل متوافق مع Android أو iOS، عليك الانتقال إلى استخدام حزم تطوير البرامج (SDK) الخاصة بتسجيل الدخول إلى الأجهزة الجوّالة في Google (Android أو iOS).
تُسهّل حزمة تطوير البرامج (SDK) الوصول إلى Google APIs وتعالج جميع المكالمات إلى نقاط نهاية تفويض OAuth 2.0 من Google.
توفّر روابط المستندات أدناه معلومات حول كيفية استخدام حزم تطوير البرامج (SDK) لتسجيل الدخول بحساب Google للوصول إلى Google APIs بدون استخدام معرف موارد منتظم (URI) لإعادة توجيه عنوان IP.
الوصول إلى Google APIs على Android
الوصول من جهة الخادم (بلا اتصال بالإنترنت)
يوضح المثال أدناه كيفية الوصول إلى Google APIs على جانب الخادم على نظام Android.Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data); try { GoogleSignInAccount account = task.getResult(ApiException.class); // request a one-time authorization code that your server exchanges for an // access token and sometimes refresh token String authCode = account.getServerAuthCode(); // Show signed-in UI updateUI(account); // TODO(developer): send code to server and exchange for access/refresh/ID tokens } catch (ApiException e) { Log.w(TAG, "Sign-in failed", e); updateUI(null); }
راجِع دليل الوصول من جهة الخادم حول كيفية الوصول إلى Google APIs من جهة الخادم.
الوصول إلى Google APIs في تطبيق iOS
الوصول من جهة العميل
يوضح المثال أدناه كيفية الوصول إلى Google APIs من جانب العميل على نظام التشغيل iOS.
user.authentication.do { authentication, error in guard error == nil else { return } guard let authentication = authentication else { return } // Get the access token to attach it to a REST or gRPC request. let accessToken = authentication.accessToken // Or, get an object that conforms to GTMFetcherAuthorizationProtocol for // use with GTMAppAuth and the Google APIs client library. let authorizer = authentication.fetcherAuthorizer() }
استخدِم رمز الدخول لاستدعاء واجهة برمجة التطبيقات، من خلال تضمين رمز الدخول في عنوان طلب REST أو gRPC (Authorization: Bearer ACCESS_TOKEN
)، أو من خلال استخدام الجهة الاسترجاعية (GTMFetcherAuthorizationProtocol
) مع مكتبة برامج Google APIs لـ Purpose-C for REST.
راجِع دليل الوصول من جهة العميل حول كيفية الوصول إلى Google APIs من جهة العميل. عن كيفية الوصول إلى Google APIs من جهة العميل.
الوصول من جهة الخادم (بلا إنترنت)
يوضح المثال أدناه كيفية الوصول إلى Google APIs من جهة الخادم لدعم برنامج iOS.GIDSignIn.sharedInstance.signIn(with: signInConfig, presenting: self) { user, error in guard error == nil else { return } guard let user = user else { return } // request a one-time authorization code that your server exchanges for // an access token and refresh token let authCode = user.serverAuthCode }
راجِع دليل الوصول من جهة الخادم حول كيفية الوصول إلى Google APIs من جهة الخادم.
عميل تطبيق Chrome
إذا تبيّن لك أنّ تطبيقك يستخدم مسار عنوان IP للردّ التلقائي على برنامج تطبيق Chrome، عليك نقل البيانات باستخدام Chrome Identity API.
يوضح المثال أدناه كيفية الحصول على جميع جهات اتصال المستخدم بدون استخدام معرف موارد منتظم (URI) لإعادة توجيه عنوان IP.
window.onload = function() { document.querySelector('button').addEventListener('click', function() { // retrieve access token chrome.identity.getAuthToken({interactive: true}, function(token) { // .......... // the example below shows how to use a retrieved access token with an appropriate scope // to call the Google People API contactGroups.get endpoint fetch( 'https://people.googleapis.com/v1/contactGroups/all?maxMembers=20&key=API_KEY', init) .then((response) => response.json()) .then(function(data) { console.log(data) }); }); }); };
راجِع دليل واجهة برمجة تطبيقات Chrome Identity للحصول على مزيد من المعلومات عن كيفية الوصول إلى مصادقة المستخدمين واستدعاء نقاط نهاية Google باستخدام واجهة برمجة تطبيقات Chrome Identity.