دليل نقل تدفق عنوان IP الاستماع إلى صوتك

نظرة عامة

في 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".

هناك خطوتَان رئيسيتَان يجب إكمالهما لإكمال عملية نقل البيانات:
  1. حدِّد ما إذا كنت متأثرًا بذلك.
  2. نقل البيانات إلى بديل متوافق إذا كنت متأثرًا بذلك.

تحديد ما إذا كنت متأثرًا بذلك

مراجعة نوع معرِّف عميل 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 لإعادة التوجيه.

فحص رمز التطبيق

راجِع قسم رمز التطبيق الذي تُجري طلبات بشأنه من خلال نقاط نهاية التفويض في Google OAuth، وحدِّد ما إذا كانت المَعلمة 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
سيبدو نموذج طلب إعادة توجيه عنوان IP العكسي كما هو أدناه:
https://accounts.google.com/o/oauth2/v2/auth?
redirect_uri=http://localhost:3000&
response_type=code&
scope=<SCOPES>&
state=<STATE>&
client_id=<CLIENT_ID>

فحص مكالمة الشبكة الصادرة

تختلف طريقة فحص المكالمات من الشبكة وفقًا لنوع برنامج العميل.
أثناء فحص مكالمات الشبكة، ابحث عن الطلبات المُرسَلة إلى نقاط نهاية التفويض في Google OAuth، وحدِّد ما إذا كانت المَعلمة 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
سيبدو نموذج طلب إعادة توجيه عنوان IP المكرر على النحو التالي:
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.