نظرة عامة
في 16 شباط (فبراير) 2022، أعلنّا عن خططنا لجعل تفاعلات Google OAuth أكثر أمانًا من خلال استخدام مسارات OAuth أكثر أمانًا. يساعدك هذا الدليل في فهم التغييرات والخطوات اللازمة ل نقل البيانات بنجاح من تدفق عنوان IP المخصّص للرجوع إلى البديل المتوافق.
يشكّل هذا الجهد تدبيرًا وقائيًا ضد هجمات التصيّد الاحتيالي وانتحال هوية التطبيقات أثناء التفاعلات مع نقاط نهاية التفويض في بروتوكول OAuth 2.0 من Google.
ما هو مسار عنوان IP المخصّص للأجهزة؟
يتيح مسار عنوان IP للرجوع إلى نفسه استخدام عنوان IP للرجوع إلى نفسه أوlocalhost
كمكوّن مضيف لعنوان URL لإعادة التوجيه الذي يتم فيه
إرسال بيانات الاعتماد بعد أن يوافق المستخدم على طلب موافقة OAuth. تتعرّض هذه العملية
للاختراق من خلال هجمات الرجل في المنتصف
حيث يمكن لتطبيق ضارّ، يصل إلى واجهة إعادة التوجيه نفسها على بعض
الأنظمة التشغيلية، اعتراض الاستجابة من خادم التفويض إلى إعادة توجيه محددة
لمعرّف الموارد المنتظم (URI) والوصول إلى رمز التفويض.
سيتم إيقاف ميزة عنوان IP للرجوع إلى نفسه نهائيًا لأنواع عملاء OAuth الأصليين على iOS وAndroid وChrome، ولكن سيظلّ بإمكانك استخدامها في تطبيقات الكمبيوتر المكتبي.
التواريخ الرئيسية للامتثال
- 14 آذار (مارس) 2022: حظر عملاء OAuth الجدد من استخدام مسار عنوان IP Loopback
- 1 آب (أغسطس) 2022: قد يتم عرض رسالة تحذير موجّهة للمستخدمين على طلبات OAuth غير المتوافقة.
- 31 آب (أغسطس) 2022: سيتم حظر تدفق عنوان IP للاستماع إلى صوتك لعملاء OAuth الأصليين على Android وتطبيقات Chrome وiOS الذين تم إنشاؤهم قبل 14 آذار (مارس) 2022.
- 21 تشرين الأول (أكتوبر) 2022: سيتم حظر جميع العملاء الحاليين (بما في ذلك العملاء المُعفى)
سيتم عرض رسالة خطأ موجّهة للمستخدمين للطلبات غير الممتثلة للمتطلبات. ستُعلم الرسالة المستخدمين بأنّه تم حظر التطبيق مع عرض عنوان البريد الإلكتروني المخصّص للدعم الذي سجّلته في شاشة طلب الموافقة المتعلّقة ببروتوكول OAuth في وحدة تحكّم Google API.
- تحديد ما إذا كنت متأثرًا بالتغيير
- نقل البيانات إلى بديل متوافق إذا كنت متأثرًا
تحديد ما إذا كنت متأثرًا
مراجعة نوع معرِّف عميل OAuth
انتقِل إلى من واطّلِع على نوع معرِّف عميل OAuth ضمن القسم معرِّفات عملاء OAuth 2.0. سيكون أيًا مما يلي: تطبيق ويب أو Android أو iOS أو Universal Windows Platform (UWP) أو تطبيق Chrome أو أجهزة التلفزيون وأجهزة الإدخال المحدودة أو تطبيق متوافق مع أجهزة الكمبيوتر المكتبي.
انتقِل إلى الخطوة التالية إذا كان نوع العميل هو Android أو تطبيق Chrome أو iOS وكنت تستخدم عملية عنوان IP للرجوع إلى نفسه.
لا تحتاج إلى اتّخاذ أي إجراء بشأن إيقاف هذه الطريقة نهائيًا إذا كنت تستخدم عملية عنوان IP الاستماع إلى صوتك على عميل OAuth لتطبيق متوافق مع أجهزة الكمبيوتر المكتبي، لأنّه سيظلّ استخدام هذا النوع من عملاء OAuth متوافقًا.
كيفية تحديد ما إذا كان تطبيقك يستخدم تدفق عنوان IP للحلقة المتكررة
راجِع رمز تطبيقك أو طلب الاتصال بالشبكة الصادر (في حال كان تطبيقك يستخدم مكتبة OAuth) لتحديد ما إذا كان طلب التفويض الذي يُرسله تطبيقك باستخدام بروتوكول OAuth من Google يستخدِم قيم معرّفات 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 باستخدام Instruments
- 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 للرجوع إلى نفسه مع نوع Android أو iOS من عملاء OAuth، عليك نقل البيانات لاستخدام حِزم تطوير البرامج (SDK) المُقترَحة (Android، iOS).
تسهِّل حِزم تطوير البرامج (SDK) الوصول إلى Google APIs وتعالج جميع طلبات الربط بنُقط نهاية التفويض في بروتوكول OAuth 2.0 من Google.
تقدّم روابط المستندات أدناه معلومات عن كيفية استخدام حِزم تطوير البرامج (SDK) المقترَحة للوصول إلى واجهات برمجة تطبيقات Google بدون استخدام عنوان IP للرجوع إلى نفسه أو معرّف الموارد المنتظم لإعادة التوجيه.
الوصول إلى واجهات برمجة تطبيقات Google على Android
الوصول من جهة العميل
يوضّح المثال التالي كيفية الوصول إلى Google APIs من جانب العميل على Android باستخدام مكتبة Google Identity Services Android Library المُقترَحة.
ListrequestedScopes = Arrays.asList(DriveScopes.DRIVE_APPDATA); AuthorizationRequest authorizationRequest = AuthorizationRequest.builder().setRequestedScopes(requestedScopes).build(); Identity.getAuthorizationClient(activity) .authorize(authorizationRequest) .addOnSuccessListener( authorizationResult -> { if (authorizationResult.hasResolution()) { // Access needs to be granted by the user PendingIntent pendingIntent = authorizationResult.getPendingIntent(); try { startIntentSenderForResult(pendingIntent.getIntentSender(), REQUEST_AUTHORIZE, null, 0, 0, 0, null); } catch (IntentSender.SendIntentException e) { Log.e(TAG, "Couldn't start Authorization UI: " + e.getLocalizedMessage()); } } else { // Access already granted, continue with user action saveToDriveAppFolder(authorizationResult); } }) .addOnFailureListener(e -> Log.e(TAG, "Failed to authorize", e));
نقْل القيمة authorizationResult
إلى الطريقة المحدّدة لحفظ المحتوى في مجلد Drive الخاص بالمستخدم. يحتوي authorizationResult
على الطريقة
getAccessToken()
التي تُعرِض رمز الدخول.
الوصول من جهة الخادم (بلا إنترنت)
يوضّح المثال التالي كيفية الوصول إلى Google APIs من جهة الخادم على Android.ListrequestedScopes = Arrays.asList(DriveScopes.DRIVE_APPDATA); AuthorizationRequest authorizationRequest = AuthorizationRequest.builder() .requestOfflineAccess(webClientId) .setRequestedScopes(requestedScopes) .build(); Identity.getAuthorizationClient(activity) .authorize(authorizationRequest) .addOnSuccessListener( authorizationResult -> { if (authorizationResult.hasResolution()) { // Access needs to be granted by the user PendingIntent pendingIntent = authorizationResult.getPendingIntent(); try { startIntentSenderForResult(pendingIntent.getIntentSender(), REQUEST_AUTHORIZE, null, 0, 0, 0, null); } catch (IntentSender.SendIntentException e) { Log.e(TAG, "Couldn't start Authorization UI: " + e.getLocalizedMessage()); } } else { String authCode = authorizationResult.getServerAuthCode(); } }) .addOnFailureListener(e -> Log.e(TAG, "Failed to authorize", e));
يحتوي authorizationResult
على
getServerAuthCode()
التي تُعرِض رمز التفويض الذي يمكنك إرساله إلى
getServerAuthCode()
للحصول على رمزَي الوصول وإعادة التحميل.
الوصول إلى واجهات برمجة تطبيقات Google في تطبيق 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 لواجهة برمجة التطبيقات REST.
راجِع دليل الوصول من جهة العميللمعرفة كيفية الوصول إلى واجهات برمجة تطبيقات Google من جهة العميل. حول كيفية الوصول إلى 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 من جهة الخادم.
برنامج Chrome App Client
إذا تبيّن لك أنّ تطبيقك يستخدم عملية عنوان IP الاستماع إلى صوتك على العميل لتطبيق Chrome، عليك نقل البيانات لاستخدام واجهة برمجة التطبيقات Chrome Identity API.
يوضّح المثال التالي كيفية الحصول على جميع جهات اتصال المستخدمين بدون استخدام عنوان URL لإعادة توجيه عنوان 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.