نظرة عامة
في 16 شباط (فبراير) 2022، أعلنّا عن خطط لجعل تفاعلات Google OAuth أكثر أمانًا من خلال استخدام مسارات OAuth أكثر أمانًا. يساعدك هذا الدليل على فهم التغييرات اللازمة والخطوات اللازمة للانتقال بنجاح من مسار عنوان IP للاسترجاع إلى البدائل المتوافقة.
تهدف هذه الجهود إلى توفير إجراء وقائي ضد هجمات التصيّد الاحتيالي وهجمات انتحال هوية التطبيقات أثناء التفاعلات مع نقاط نهاية تفويض OAuth 2.0 من Google.
ما هو مسار عنوان IP للاسترجاع؟
يتيح مسار عنوان IP للاسترجاع استخدام عنوان IP للاسترجاع أوlocalhost
كمكوّن مضيف لمعرّف الموارد المنتظم (URI) لإعادة التوجيه حيث
يتم إرسال بيانات الاعتماد بعد موافقة المستخدم على طلب موافقة OAuth. وهذا المسار عرضة لهجمات الوسيط التي قد يعترض فيها تطبيق خبيث، إذا كان يدخل إلى واجهة الاسترجاع نفسها، على بعض أنظمة التشغيل، الاستجابة من خادم التفويض إلى معرّف الموارد المنتظم (URI) المحدد لإعادة التوجيه وبالتالي يمكنه الوصول إلى رمز التفويض.
يتم إيقاف مسار عنوان IP للاسترجاع نهائيًا لأنواع برامج OAuth الخاصة بـ iOS وAndroid وChrome، إلا أنّ مساره سيظل متاحًا على تطبيقات أجهزة الكمبيوتر المكتبي.
تواريخ الامتثال الرئيسية
- 14 آذار (مارس) 2022: تم منع عملاء OAuth الجدد من استخدام مسار عنوان IP للاسترجاع
- 1 آب (أغسطس) 2022: قد يتم عرض رسالة تحذير موجّهة للمستخدمين بشأن طلبات OAuth غير الممتثلة للسياسة.
- 31 آب (أغسطس) 2022: تم حظر مسار عنوان IP الخاص باسترجاع عيّنة من خلال عملاء OAuth وAndroid وChrome وiOS الذين تم إنشاؤهم قبل 14 آذار (مارس) 2022.
- 21 تشرين الأول (أكتوبر) 2022: تم حظر جميع العملاء الحاليين (بما في ذلك العملاء المعفيون).
ستظهر رسالة خطأ موجَّهة للمستخدمين للطلبات غير المتوافقة مع السياسة. ستنقل الرسالة إلى المستخدمين تفيد بأنّه تم حظر التطبيق أثناء عرض الرسالة الإلكترونية للدعم التي سجّلتها في شاشة موافقة OAuth في وحدة تحكُّم Google API.
- يُرجى تحديد ما إذا كنت متأثرًا بالمشكلة.
- ننصحك بنقل بياناتك إلى عنوان بديل متوافق إذا كنت متأثرًا بالمشكلة.
تحديد ما إذا كنت متأثرًا بالمشكلة
مراجعة نوع معرِّف عميل OAuth
انتقِل إلى Credentials page Google API Console واطّلِع على نوع معرِّف عميل OAuth ضمن قسم معرِّفات عملاء OAuth 2.0. سيكون أيًا ممّا يلي: تطبيق الويب أو Android أو iOS أو نظام Windows الأساسي (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: فحص حركة بيانات الشبكة باستخدام Network Inspector (أداة فحص الشبكة)
-
تطبيقات Chrome
- انتقِل إلى صفحة إضافات Chrome.
- ضَع علامة في مربّع الاختيار وضع مطوّر البرامج في أعلى يسار صفحة الإضافات.
- اختيار الإضافة التي تريد مراقبتها
- انقر على رابط صفحة الخلفية في قسم فحص الملفات الشخصية في صفحة الإضافة.
- ستظهر نافذة منبثقة باسم أدوات المطوّرين (Developer Tools) من أجل مساعدتك في رصد حركة بيانات الشبكة في علامة التبويب "الشبكة".
- 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 للاسترجاع مع نوع عميل OAuth لنظام التشغيل 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 لـ Objective-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 API للاطّلاع على مزيد من المعلومات حول كيفية الوصول إلى مصادقة المستخدمين وطلب نقاط نهاية Google باستخدام Chrome Identity API.