Ringkasan
Pada 16 Februari 2022, kami mengumumkan rencana untuk membuat interaksi OAuth Google lebih aman dengan menggunakan alur OAuth yang lebih aman. Panduan ini membantu Anda memahami perubahan dan langkah-langkah yang diperlukan untuk berhasil melakukan migrasi dari alur alamat IP loopback ke alternatif yang didukung.
Upaya ini merupakan langkah perlindungan terhadap serangan phishing dan peniruan aplikasi selama interaksi dengan endpoint otorisasi OAuth 2.0 Google.
Apa alur Alamat IP Loopback?
Alur alamat IP loopback mendukung penggunaan alamat IP loopback ataulocalhost
sebagai komponen host URI pengalihan tempat
kredensial dikirim setelah pengguna menyetujui permintaan izin OAuth. Alur ini rentan terhadap serangan man in the middle, di mana aplikasi berbahaya, yang mengakses antarmuka loopback yang sama di 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 di aplikasi desktop.
Tanggal penting kepatuhan
- 14 Maret 2022 - klien OAuth baru diblokir agar tidak menggunakan alur alamat IP Loopback
- 1 Agustus 2022 - pesan peringatan yang ditampilkan kepada pengguna mungkin ditampilkan untuk 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 lama diblokir (termasuk klien yang dikecualikan)
Pesan error yang ditampilkan kepada pengguna akan ditampilkan untuk permintaan yang tidak mematuhi kebijakan. Pesan akan menyampaikan kepada pengguna bahwa aplikasi diblokir sambil menampilkan email dukungan yang telah Anda daftarkan di layar izin OAuth di Konsol Google API.
- Tentukan apakah Anda terpengaruh.
- Bermigrasi ke alternatif yang didukung jika Anda terpengaruh.
Menentukan apakah Anda terpengaruh
Meninjau jenis client ID OAuth Anda
Buka Clients page Google Cloud Console dan lihat jenis ID klien OAuth Anda di bagian OAuth 2.0 Client IDs. Nilainya 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 apa pun terkait penghentian penggunaan ini jika Anda menggunakan alur alamat IP loopback pada 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 Anda atau panggilan jaringan keluar (jika aplikasi Anda menggunakan library OAuth) untuk menentukan apakah permintaan otorisasi Google OAuth yang dilakukan aplikasi Anda menggunakan nilai URI pengalihan loopback.
Periksa kode aplikasi Anda
redirect_uri
memiliki salah satu
nilai berikut:
-
redirect_uri=http://127.0.0.1:<port>
misalnyaredirect_uri=http://127.0.0.1:3000
-
redirect_uri=http://[::1]:<port>
misalnyaredirect_uri=http://[::1]:3000
-
redirect_uri=http://localhost:<port>
misalnyaredirect_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>
Memeriksa panggilan jaringan keluar
- Aplikasi web - memeriksa aktivitas jaringan di Chrome
- Android - memeriksa traffic jaringan dengan Network Inspector
-
Aplikasi Chrome
- Buka halaman Ekstensi Chrome
- Centang kotak Mode developer di pojok kanan atas halaman ekstensi
- Pilih ekstensi yang ingin Anda pantau
- Klik link halaman latar belakang di bagian Periksa tampilan di halaman ekstensi
- Pop-up Developer Tools akan terbuka dan Anda dapat memantau traffic jaringan di tab Network
- iOS - Menganalisis traffic HTTP dengan Instruments
- Universal Windows Platform (UWP) - Memeriksa traffic jaringan di Visual Studio
- Aplikasi desktop - gunakan alat perekaman jaringan yang tersedia untuk sistem operasi tempat aplikasi dikembangkan
redirect_uri
memiliki salah satu nilai
berikut:
-
redirect_uri=http://127.0.0.1:<port>
misalnyaredirect_uri=http://127.0.0.1:3000
-
redirect_uri=http://[::1]:<port>
misalnyaredirect_uri=http://[::1]:3000
-
redirect_uri=http://localhost:<port>
misalnyaredirect_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>
Bermigrasi ke alternatif yang didukung
Klien Seluler (Android / iOS)
Jika Anda menentukan bahwa aplikasi Anda menggunakan alur alamat IP loopback dengan jenis klien OAuth Android atau iOS, Anda harus bermigrasi untuk menggunakan SDK yang direkomendasikan (Android, iOS).
SDK memudahkan akses ke Google API dan menangani semua panggilan ke endpoint otorisasi OAuth 2.0 Google.
Link dokumentasi di bawah memberikan informasi tentang cara menggunakan SDK yang direkomendasikan untuk mengakses Google API tanpa menggunakan URI pengalihan alamat IP loopback.
Mengakses Google API di Android
Akses sisi klien
Contoh berikut menunjukkan cara mengakses Google API di sisi klien di Android menggunakan Google Identity Services Android Library yang direkomendasikan.
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));
Teruskan authorizationResult
ke metode yang Anda tentukan untuk menyimpan konten ke folder drive pengguna. authorizationResult
memiliki
metode
getAccessToken()
yang menampilkan token akses.
Akses Sisi Server (offline)
Contoh berikut menunjukkan cara mengakses Google API di sisi server di 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
memiliki
metode
getServerAuthCode()
yang menampilkan kode otorisasi yang dapat Anda kirim ke
backend untuk mendapatkan token akses dan refresh.
Mengakses Google API di Aplikasi iOS
Akses sisi klien
Contoh di bawah menunjukkan cara mengakses Google API di sisi klien di 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 pengambilan (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 mengetahui informasi selengkapnya tentang cara mengakses pengguna yang diautentikasi dan memanggil endpoint Google dengan Chrome Identity API.