Panduan Migrasi alur Alamat IP Loopback

Ringkasan

Pada 16 Februari 2022, kami mengumumkan rencana untuk menjadikan interaksi Google OAuth lebih aman dengan menggunakan alur OAuth yang lebih aman. Panduan ini membantu Anda memahami perubahan dan langkah yang diperlukan agar berhasil bermigrasi dari alur alamat IP loopback ke alternatif yang didukung.

Upaya ini merupakan tindakan perlindungan terhadap serangan phishing dan peniruan identitas aplikasi selama interaksi dengan endpoint otorisasi OAuth 2.0 Google.

Apa alur Alamat IP Loopback?

Alur alamat IP loopback mendukung penggunaan alamat IP loopback atau localhost sebagai komponen host URI pengalihan tempat kredensial dikirim setelah pengguna menyetujui permintaan izin OAuth. Alur ini rentan terhadap serangan man in the middle, ketika aplikasi jahat, yang mengakses antarmuka loopback yang sama pada beberapa sistem operasi, dapat mencegat respons dari server otorisasi ke URI pengalihan yang diberikan dan mendapatkan akses ke kode otorisasi.

Alur alamat IP loopback tidak digunakan lagi untuk jenis klien OAuth iOS, Android, dan Chrome native, tetapi akan terus didukung pada aplikasi desktop.

Tanggal kepatuhan penting

  • 14 Maret 2022 - klien OAuth baru diblokir agar tidak menggunakan alur alamat IP Loopback
  • 1 Agustus 2022 - pesan peringatan yang dilihat pengguna mungkin ditampilkan ke permintaan OAuth yang tidak mematuhi kebijakan
  • 31 Agustus 2022 - Alur alamat IP Loopback diblokir untuk klien OAuth Android, aplikasi Chrome, dan iOS native yang dibuat sebelum 14 Maret 2022
  • 21 Oktober 2022 - semua klien yang ada diblokir (termasuk klien yang dikecualikan)

Pesan error yang ditampilkan kepada pengguna akan ditampilkan untuk permintaan yang tidak mematuhi kebijakan. Pesan tersebut akan menyampaikan kepada pengguna bahwa aplikasi diblokir saat menampilkan email dukungan yang telah Anda daftarkan di layar izin OAuth di Konsol API Google.

Ada dua langkah utama yang harus diselesaikan untuk menyelesaikan proses migrasi:
  1. Tentukan apakah Anda terdampak.
  2. Lakukan migrasi ke alternatif yang didukung jika Anda terpengaruh.

Tentukan apakah Anda terdampak

Tinjau jenis client ID OAuth Anda

Buka dan lihat jenis client ID OAuth Anda di bagian Client ID OAuth 2.0. Perangkat tersebut akan berupa salah satu dari berikut: Aplikasi web, Android, iOS, Universal Windows Platform (UWP), aplikasi Chrome, TV & perangkat Input Terbatas, Aplikasi desktop.

Lanjutkan ke langkah berikutnya jika jenis klien Anda adalah Android, aplikasi Chrome, atau iOS dan Anda menggunakan alur alamat IP loopback.

Anda tidak perlu melakukan tindakan apa pun terkait penghentian penggunaan ini jika menggunakan alur alamat IP loopback di klien OAuth aplikasi Desktop, karena penggunaan dengan jenis klien OAuth tersebut akan terus didukung.

Cara menentukan apakah aplikasi Anda menggunakan alur alamat IP loopback

Periksa kode aplikasi atau panggilan jaringan keluar (jika aplikasi menggunakan library OAuth) untuk menentukan apakah permintaan otorisasi Google OAuth yang dibuat aplikasi Anda menggunakan nilai URI pengalihan loopback.

Memeriksa kode aplikasi

Tinjau bagian kode aplikasi tempat Anda melakukan panggilan ke endpoint otorisasi Google OAuth dan tentukan apakah parameter redirect_uri memiliki salah satu nilai berikut:
  • redirect_uri=http://127.0.0.1:<port> misalnya, redirect_uri=http://127.0.0.1:3000
  • redirect_uri=http://[::1]:<port> misalnya, redirect_uri=http://[::1]:3000
  • redirect_uri=http://localhost:<port> misalnya, redirect_uri=http://localhost:3000
Contoh permintaan alur pengalihan alamat IP loopback akan terlihat seperti di bawah ini:
https://accounts.google.com/o/oauth2/v2/auth?
redirect_uri=http://localhost:3000&
response_type=code&
scope=<SCOPES>&
state=<STATE>&
client_id=<CLIENT_ID>

Memeriksa panggilan jaringan keluar

Metode untuk memeriksa panggilan jaringan akan bervariasi bergantung pada jenis klien aplikasi Anda.
Saat memeriksa panggilan jaringan, cari permintaan yang dikirim ke endpoint otorisasi Google OAuth dan tentukan apakah parameter redirect_uri memiliki salah satu nilai berikut:
  • redirect_uri=http://127.0.0.1:<port> misalnya, redirect_uri=http://127.0.0.1:3000
  • redirect_uri=http://[::1]:<port> misalnya, redirect_uri=http://[::1]:3000
  • redirect_uri=http://localhost:<port> misalnya, redirect_uri=http://localhost:3000
Contoh permintaan alur pengalihan alamat IP loopback akan terlihat seperti di bawah ini:
https://accounts.google.com/o/oauth2/v2/auth?
redirect_uri=http://localhost:3000&
response_type=code&
scope=<SCOPES>&
state=<STATE>&
client_id=<CLIENT_ID>

Bermigrasi ke alternatif yang didukung

Klien Seluler (Android / iOS)

Jika menentukan bahwa aplikasi Anda menggunakan alur alamat IP loopback dengan jenis klien OAuth Android atau iOS, Anda harus bermigrasi untuk menggunakan SDK seluler Login dengan Google kami (Android, iOS).

SDK ini memudahkan Anda mengakses Google API dan menangani semua panggilan ke endpoint otorisasi OAuth 2.0 Google.

Link dokumentasi di bawah ini memberikan informasi tentang cara menggunakan SDK Login dengan Google untuk mengakses Google API tanpa menggunakan URI pengalihan alamat IP loopback.

Mengakses Google API di Android

Akses Sisi Server (offline)
Contoh di bawah ini menunjukkan cara mengakses Google API di sisi server pada 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);
}

Tinjau panduan akses sisi server tentang cara mengakses Google API dari sisi server.

Mengakses Google API di Aplikasi iOS

Akses sisi klien

Contoh di bawah ini menunjukkan cara mengakses Google API di sisi klien pada 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()
}

Gunakan token akses untuk memanggil API, dengan menyertakan token akses di header permintaan REST atau gRPC (Authorization: Bearer ACCESS_TOKEN), atau dengan menggunakan pemberi otorisasi pengambil (GTMFetcherAuthorizationProtocol) dengan library klien Google API untuk Objective-C untuk REST.

Tinjau panduan akses sisi klien tentang cara mengakses Google API di sisi klien. tentang cara mengakses Google API di sisi klien.

Akses sisi server (offline)
Contoh di bawah ini menunjukkan cara mengakses Google API di sisi server untuk mendukung klien 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
}

Tinjau panduan akses sisi server tentang cara mengakses Google API dari sisi server.

Klien Aplikasi Chrome

Jika Anda menentukan bahwa aplikasi Anda menggunakan alur alamat IP loopback di klien aplikasi Chrome, Anda harus bermigrasi untuk menggunakan Chrome Identity API.

Contoh di bawah menunjukkan cara mendapatkan semua kontak pengguna tanpa menggunakan URI pengalihan alamat IP loopback.

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)
    });
   });
 });
};

Tinjau Panduan Chrome Identity API untuk informasi selengkapnya tentang cara mengakses autentikasi pengguna dan memanggil endpoint Google dengan Chrome Identity API.