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

نظرة عامة

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

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

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

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

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

راجِع قسم رمز التطبيق الذي تُجري فيه طلبات إلى نقاط نهاية التفويض في 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 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.