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

نظرة عامة

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

هناك خطوتان أساسيتان يجب إكمالهما لاجتياز عملية نقل البيانات:
  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>

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

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