نظرة عامة
في 16 شباط (فبراير) 2022، أعلنّا عن خطط لجعل تفاعلات OAuth مع Google أكثر أمانًا باستخدام مسارات 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 لميزة الاستماع إلى نسخة سابقة من Google في ما يتعلّق بعملاء OAuth الذين يستخدمون تطبيقات Android وChrome وiOS الأصلية التي تم إنشاؤها قبل 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: فحص حركة بيانات الشبكة باستخدام أداة Network Inspector
-
تطبيقات Chrome
- انتقِل إلى صفحة "إضافات Chrome".
- ضَع علامة في مربّع الاختيار وضع مطوّر البرامج في أعلى يسار صفحة الإضافات.
- اختَر الإضافة التي تريد مراقبتها.
- انقر على رابط صفحة الخلفية في قسم فحص الملفات الشخصية في صفحة الإضافة.
- سيتم فتح نافذة منبثقة بعنوان أدوات المطوّرين حيث يمكنك مراقبة حركة بيانات الشبكة في علامة التبويب "الشبكة"
- iOS: تحليل حركة مرور HTTP باستخدام الأدوات
- Universal Windows Platform (نظام التشغيل Windows الأساسي): فحص حركة بيانات الشبكة في 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 للأهداف 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 للحصول على مزيد من المعلومات حول طريقة الوصول إلى المصادقة على المستخدمين والاتصال بنقاط نهاية Google باستخدام Chrome Identity API.