نمای کلی
در ۱۶ فوریه ۲۰۲۲، برنامههایی را برای ایمنتر کردن تعاملات Google OAuth با استفاده از جریانهای OAuth امنتر اعلام کردیم . این راهنما به شما کمک می کند تا تغییرات و مراحل لازم برای انتقال موفقیت آمیز از جریان آدرس IP حلقه بک به گزینه های پشتیبانی شده را درک کنید.
این تلاش یک اقدام محافظتی در برابر حملات فیشینگ و جعل هویت برنامه در طول تعامل با نقاط پایانی مجوز OAuth 2.0 Google است.
جریان آدرس IP Loopback چیست؟
جریان آدرس IP Loopback از استفاده از یک آدرس IP loopback یاlocalhost
به عنوان جزء میزبان URI تغییر مسیر که پس از تأیید یک درخواست رضایت OAuth توسط کاربر، به آن ارسال می شود، پشتیبانی می کند. این جریان در حملات میانی برای انسان آسیب پذیر است، جایی که یک برنامه شرور، با دسترسی به رابط حلقه بک مشابه در برخی از سیستم عامل ها، ممکن است پاسخ سرور مجوز به URI تغییر مسیر داده شده را رهگیری کند و به کد مجوز دسترسی پیدا کند.جریان آدرس IP حلقهای برای انواع کلاینت اصلی iOS، Android و Chrome OAuth منسوخ شده است، اما همچنان در برنامههای دسکتاپ پشتیبانی میشود.
تاریخ های کلیدی انطباق
- 14 مارس 2022 - مشتریان OAuth جدید از استفاده از جریان آدرس IP Loopback مسدود شدند
- 1 آگوست 2022 - ممکن است یک پیام اخطار رو به روی کاربر برای درخواستهای OAuth ناسازگار نمایش داده شود
- 31 آگوست 2022 - جریان آدرس IP Loopback برای کلاینتهای بومی Android، برنامه Chrome و iOS OAuth ایجاد شده قبل از 14 مارس 2022 مسدود شده است.
- 21 اکتبر 2022 - همه مشتریان موجود مسدود شده اند (از جمله مشتریان معاف)
یک پیام خطای کاربر برای درخواستهای ناسازگار نمایش داده میشود. این پیام هنگام نمایش ایمیل پشتیبانی که در صفحه رضایت OAuth در Google API Console ثبت کردهاید، به کاربران اطلاع میدهد که برنامه مسدود شده است.
- تعیین کنید که آیا تحت تأثیر قرار گرفته اید یا خیر.
- اگر تحت تأثیر قرار گرفتید، به یک جایگزین پشتیبانی شده مهاجرت کنید.
تعیین کنید که آیا تحت تأثیر قرار گرفته اید یا خیر
نوع شناسه مشتری OAuth خود را مرور کنید
حرکت به Credentials page از Google API Console و نوع شناسه مشتری OAuth خود را در بخش شناسه های مشتری OAuth 2.0 مشاهده کنید. این یکی از موارد زیر خواهد بود: برنامه وب ، Android ، iOS ، Universal Windows Platform (UWP) ، برنامه Chrome ، تلویزیونها و دستگاههای ورودی محدود ، برنامه دسکتاپ .
اگر نوع کلاینت شما Android، برنامه Chrome یا iOS است و از جریان آدرس IP Loopback استفاده می کنید، به مرحله بعدی بروید.
اگر از جریان آدرس IP حلقه بک روی یک سرویس گیرنده OAuth برنامه دسکتاپ استفاده می کنید، نیازی به انجام هیچ کاری مربوط به این منسوخ شدن ندارید، زیرا استفاده با آن نوع مشتری OAuth همچنان پشتیبانی می شود.
چگونه تشخیص دهیم که آیا برنامه شما از جریان آدرس IP Loopback استفاده می کند یا خیر
کد برنامه خود یا تماس خروجی شبکه (در صورتی که برنامه شما از کتابخانه 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 ترافیک شبکه را بررسی کنید
- برنامه های کروم
- به صفحه افزونه های کروم بروید
- کادر انتخاب حالت برنامه نویس در گوشه سمت راست بالای صفحه برنامه افزودنی را علامت بزنید
- افزونه ای را که می خواهید نظارت کنید انتخاب کنید
- روی پیوند صفحه پس زمینه در بخش Inspect views صفحه افزونه کلیک کنید
- یک پنجره Developer Tools باز می شود که در آن می توانید ترافیک شبکه را در زبانه Network نظارت کنید
- iOS - تجزیه و تحلیل ترافیک HTTP با ابزار
- Universal Windows Platform (UWP) - ترافیک شبکه را در ویژوال استودیو بررسی کنید
- برنامه های دسکتاپ - از یک ابزار ضبط شبکه در دسترس برای سیستم عاملی که برنامه برای آن توسعه یافته است استفاده کنید
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>
به یک جایگزین پشتیبانی شده مهاجرت کنید
مشتریان موبایل (اندروید / iOS)
اگر تشخیص دادید که برنامه شما از جریان آدرس IP Loopback با نوع کلاینت OAuth Android یا iOS استفاده میکند، باید به استفاده از SDKهای تلفن همراه با ورود به سیستم Google ( Android ، iOS ) مهاجرت کنید.
SDK دسترسی به API های Google را آسان می کند و همه تماس ها با نقاط پایانی مجوز OAuth 2.0 Google را مدیریت می کند.
پیوندهای مستندات زیر اطلاعاتی را در مورد نحوه استفاده از Google Sign-In SDK برای دسترسی به APIهای Google بدون استفاده از URI تغییر مسیر آدرس IP Loopback ارائه می دهد.
دسترسی به APIهای Google در Android
دسترسی سمت سرور (آفلاین).
مثال زیر نحوه دسترسی به APIهای Google در سمت سرور در 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 API از سمت سرور مرور کنید.
دسترسی به Google API در یک برنامه iOS
دسترسی سمت مشتری
مثال زیر نحوه دسترسی به APIهای Google در سمت سرویس گیرنده در 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() }
از نشانه دسترسی برای فراخوانی API استفاده کنید، با گنجاندن رمز دسترسی در سرصفحه درخواست REST یا gRPC ( Authorization: Bearer ACCESS_TOKEN
)، یا با استفاده از مجوز واکشی ( GTMFetcherAuthorizationProtocol
) با کتابخانه سرویس گیرنده Google APIs برای Objective-C. برای استراحت
راهنمای دسترسی سمت سرویس گیرنده را در مورد نحوه دسترسی به APIهای Google در سمت مشتری مرور کنید. در مورد نحوه دسترسی به API های Google در سمت مشتری.
دسترسی سمت سرور (آفلاین).
مثال زیر نحوه دسترسی به APIهای Google در سمت سرور برای پشتیبانی از کلاینت 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 API از سمت سرور مرور کنید.
سرویس گیرنده برنامه Chrome
اگر تشخیص دادید که برنامه شما از جریان آدرس IP بازگشتی در سرویس گیرنده برنامه Chrome استفاده می کند، باید به استفاده از Chrome Identity API مهاجرت کنید.
مثال زیر نشان می دهد که چگونه می توان تمام مخاطبین کاربر را بدون استفاده از آدرس IP تغییر مسیر URI حلقه بک دریافت کرد.
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 مرور کنید.