راهنمای انتقال جریان آدرس IP Loopback

نمای کلی

در ۱۶ فوریه ۲۰۲۲، برنامه‌هایی را برای ایمن‌تر کردن تعاملات 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 ثبت کرده‌اید، به کاربران اطلاع می‌دهد که برنامه مسدود شده است.

برای انجام فرآیند مهاجرت دو مرحله اصلی وجود دارد:
  1. تعیین کنید که آیا تحت تأثیر قرار گرفته اید یا خیر.
  2. اگر تحت تأثیر قرار گرفتید، به یک جایگزین پشتیبانی شده مهاجرت کنید.

تعیین کنید که آیا تحت تأثیر قرار گرفته اید یا خیر

نوع شناسه مشتری 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 تغییر مسیر برگشتی استفاده می کند یا خیر.

کد برنامه خود را بررسی کنید

بخشی از کد برنامه خود را که در آن با نقاط پایانی مجوز 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 Loopback مانند شکل زیر خواهد بود:
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 Loopback مانند شکل زیر خواهد بود:
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 مرور کنید.