نظرة عامة
في 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 الأصليين والذين تم إنشاؤه قبل 14 آذار (مارس) 2022
- 21 تشرين الأول (أكتوبر) 2022: سيتم حظر جميع العملاء الحاليين (بما في ذلك العملاء المعفيون)
سيتم عرض رسالة خطأ موجَّهة للمستخدمين الذين يواجهون طلبات غير متوافقة. ستبلغ الرسالة المستخدمين بأن التطبيق محظور أثناء عرض البريد الإلكتروني للدعم الذي سجّلته في شاشة موافقة OAuth في "وحدة تحكُّم Google API".
- حدِّد ما إذا كنت متأثرًا بذلك.
- نقل البيانات إلى بديل متوافق إذا كنت متأثرًا بذلك.
تحديد ما إذا كنت متأثرًا بذلك
مراجعة نوع معرِّف عميل 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 العكسي مع نوع عميل OAuth على نظام التشغيل Android أو iOS، عليك نقل البيانات إلى استخدام حزم تطوير البرامج (SDK) لتسجيل الدخول إلى الأجهزة الجوّالة في Google (لنظامَي التشغيل Android أو iOS).
تسهِّل حزمة تطوير البرامج (SDK) الوصول إلى واجهات Google API وتتعامل مع جميع المكالمات لنقاط نهاية تفويض OAuth 2.0 من Google.
توفّر روابط المستندات أدناه معلومات حول كيفية استخدام حزم تطوير البرامج (SDK) لتسجيل الدخول بحساب Google للوصول إلى واجهات Google API بدون استخدام معرّف الموارد المنتظم (URI) لإعادة توجيه عنوان IP.
الوصول إلى واجهات Google API على نظام التشغيل Android
الوصول من جهة الخادم (بلا إنترنت)
يوضّح المثال أدناه كيفية الوصول إلى واجهات Google API على جانب الخادم على أجهزة 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 API في تطبيق iOS
الوصول من جهة العميل
يوضّح المثال التالي كيفية الوصول إلى واجهات Google API من جهة العميل على نظام التشغيل 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 API من جهة العميل. حول كيفية الوصول إلى واجهات Google API من جهة العميل
الوصول من جهة الخادم (بلا إنترنت)
يوضّح المثال التالي كيفية الوصول إلى واجهات Google API من جهة الخادم لإتاحة برنامج 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.
يوضح المثال أدناه كيفية الحصول على جميع جهات اتصال المستخدم بدون استخدام معرّف الموارد المنتظم (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.