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 out-of-band (OOB) OAuth 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 itu OOB?
OAuth out-of-band (OOB), yang juga disebut sebagai opsi salin/tempel manual, adalah alur lama yang dikembangkan untuk mendukung klien native yang tidak memiliki URI pengalihan agar menerima kredensial setelah pengguna menyetujui permintaan izin OAuth. Alur OOB menimbulkan risiko phishing jarak jauh dan klien harus bermigrasi ke metode alternatif untuk memberikan perlindungan dari kerentanan ini.Alur OOB tidak digunakan lagi untuk semua jenis klien, yaitu aplikasi web, Android, iOS, Universal Windows Platform (UWP), aplikasi Chrome, TV & perangkat input terbatas, aplikasi Desktop.
Tanggal kepatuhan penting
- 28 Februari 2022 - penggunaan OAuth baru diblokir untuk alur OOB
- 5 September 2022 - pesan peringatan yang dilihat pengguna mungkin ditampilkan ke permintaan OAuth yang tidak mematuhi kebijakan
- 3 Oktober 2022 - alur OOB tidak digunakan lagi untuk klien OAuth yang dibuat sebelum 28 Februari 2022
- 31 Januari 2023 - 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.
- Tentukan apakah Anda terdampak.
- Lakukan migrasi ke alternatif yang lebih aman jika Anda terpengaruh.
Tentukan apakah Anda terdampak
Penghentian ini hanya berlaku untuk aplikasi produksi (yaitu aplikasi dengan status publikasi yang ditetapkan ke Dalam Produksi. Alur ini akan terus berfungsi untuk aplikasi dengan Status publikasi pengujian.
Tinjau status publikasi Anda di OAuth dan lanjutkan ke langkah berikutnya jika Anda menggunakan alur OOB dalam project dengan status publikasi "Dalam Produksi".
Cara menentukan apakah aplikasi Anda menggunakan alur OOB
Periksa kode aplikasi Anda atau panggilan jaringan keluar (jika aplikasi Anda menggunakan library OAuth) untuk menentukan apakah permintaan otorisasi Google OAuth yang dibuat aplikasi Anda menggunakan nilai URI pengalihan OOB.
Memeriksa kode aplikasi
redirect_uri
memiliki salah satu
nilai berikut:
redirect_uri=urn:ietf:wg:oauth:2.0:oob
redirect_uri=urn:ietf:wg:oauth:2.0:oob:auto
redirect_uri=oob
https://accounts.google.com/o/oauth2/v2/auth? response_type=code& scope=<SCOPES>& state=<STATE>& redirect_uri=urn:ietf:wg:oauth:2.0:oob& 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 sudut kanan atas halaman ekstensi
- Pilih ekstensi yang ingin Anda pantau
- Klik link halaman latar belakang di bagian Memeriksa tampilan di halaman ekstensi
- Pop-up Developer Tools akan terbuka, tempat Anda dapat memantau traffic jaringan di tab Network
- iOS - Menganalisis traffic HTTP dengan Instrumen
- Universal Windows Platform (UWP) - Memeriksa traffic jaringan di Visual Studio
- Aplikasi desktop - menggunakan alat perekaman jaringan yang tersedia untuk sistem operasi yang menjadi target pengembangan aplikasi
redirect_uri
memiliki salah satu
nilai berikut:
redirect_uri=urn:ietf:wg:oauth:2.0:oob
redirect_uri=urn:ietf:wg:oauth:2.0:oob:auto
redirect_uri=oob
https://accounts.google.com/o/oauth2/v2/auth? response_type=code& scope=<SCOPES>& state=<STATE>& redirect_uri=urn:ietf:wg:oauth:2.0:oob& client_id=<CLIENT_ID>
Bermigrasi ke alternatif yang aman
Klien Seluler (Android / iOS)
Jika Anda menentukan bahwa aplikasi Anda menggunakan alur OOB 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 OOB.
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 OOB 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 OOB.
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.
Aplikasi Web
Jika Anda menentukan bahwa aplikasi Anda menggunakan alur OOB untuk aplikasi web, Anda harus bermigrasi untuk menggunakan salah satu library klien Google API kami. Library klien untuk bahasa pemrograman yang berbeda tercantum di sini.
Library ini memudahkan untuk mengakses Google API dan menangani semua panggilan ke endpoint Google.
Akses sisi server (offline)
- Siapkan server dan tentukan endpoint yang dapat diakses secara publik (URI pengalihan) untuk menerima kode otorisasi.
- Konfigurasikan URI pengalihan di dari
Cuplikan kode di bawah ini menunjukkan contoh NodeJS penggunaan Google Drive API untuk menampilkan file Google Drive pengguna di sisi server tanpa menggunakan URI pengalihan OOB.
async function main() { const server = http.createServer(async function (req, res) { if (req.url.startsWith('/oauth2callback')) { let q = url.parse(req.url, true).query; if (q.error) { console.log('Error:' + q.error); } else { // Get access and refresh tokens (if access_type is offline) let { tokens } = await oauth2Client.getToken(q.code); oauth2Client.setCredentials(tokens); // Example of using Google Drive API to list filenames in user's Drive. const drive = google.drive('v3'); drive.files.list({ auth: oauth2Client, pageSize: 10, fields: 'nextPageToken, files(id, name)', }, (err1, res1) => { // TODO(developer): Handle response / error. }); } } }
Tinjau panduan aplikasi web sisi server tentang cara mengakses Google API dari sisi server.
Akses Sisi Klien
Cuplikan kode di bawah ini, dalam JavaScript, menunjukkan contoh penggunaan Google API untuk mengakses acara kalender pengguna pada sisi klien.
// initTokenClient() initializes a new token client with your // web app's client ID and the scope you need access to const client = google.accounts.oauth2.initTokenClient({ client_id: 'YOUR_GOOGLE_CLIENT_ID', scope: 'https://www.googleapis.com/auth/calendar.readonly', // callback function to handle the token response callback: (tokenResponse) => { if (tokenResponse && tokenResponse.access_token) { gapi.client.setApiKey('YOUR_API_KEY'); gapi.client.load('calendar', 'v3', listUpcomingEvents); } }, }); function listUpcomingEvents() { gapi.client.calendar.events.list(...); }
Tinjau panduan aplikasi web sisi klien tentang cara mengakses Google API dari sisi klien.
Klien desktop
Jika Anda menentukan bahwa aplikasi Anda menggunakan alur OOB pada klien desktop,
Anda harus bermigrasi untuk menggunakan
alur alamat IP loopback (localhost
atau 127.0.0.1
).