Kami menghentikan Platform Perpustakaan Google Sign-In JavaScript untuk web . Untuk otentikasi dan user masuk, menggunakan Layanan Identity Google SDK baru untuk kedua Web dan Android sebagai gantinya .

Bermigrasi dari GoogleAuthUtil dan Plus.API

Jika sebelumnya Anda terintegrasi dengan Google Sign-In menggunakan GoogleAuthUtil.getToken atau Plus.API , Anda harus bermigrasi ke Sign-In API terbaru untuk keamanan yang lebih baik dan pengalaman pengguna yang lebih baik.

Bermigrasi dari anti-pola token akses

Anda tidak boleh mengirim token akses yang diperoleh dengan GoogleAuthUtil.getToken ke server backend Anda sebagai pernyataan identitas, karena Anda tidak dapat dengan mudah memverifikasi bahwa token itu dikeluarkan untuk backend Anda, sehingga Anda rentan terhadap penyisipan token akses dari penyerang.

Misalnya, jika kode Android Anda terlihat seperti contoh di bawah ini, Anda harus memigrasikan aplikasi Anda ke praktik terbaik saat ini.

Kode Android

Dalam contoh ini, akses permintaan tanda menggunakan oauth2: ditambah string lingkup sebagai scope parameter untuk GoogleAuthUtil.getToken panggilan ( oauth2:https://www.googleapis.com/auth/plus.login ).

Daripada mengautentikasi dengan token akses yang diperoleh dengan GoogleAuthUtil.getToken , gunakan aliran token ID atau aliran kode autentikasi.

Bermigrasi ke aliran token ID

Jika yang Anda butuhkan hanyalah ID pengguna, alamat email, nama, atau URL gambar profil, gunakan alur token ID .

Untuk bermigrasi ke aliran token ID, lakukan perubahan berikut:

Sisi klien Android

  • Hapus GET_ACCOUNTS (Kontak) jika Anda memintanya
  • Alihkan kode apa pun menggunakan GoogleAuthUtil , Plus.API , AccountPicker.newChooseAccountIntent() , atau AccountManager.newChooseAccountIntent() ke Auth.GOOGLE_SIGN_IN_API dengan Auth.GOOGLE_SIGN_IN_API GoogleSignInOptions.Builder.requestIdToken(...) .

Sisi server

  • Buat titik akhir baru untuk autentikasi token ID
  • Nonaktifkan titik akhir lama setelah aplikasi klien Anda dimigrasi

Migrasikan ke aliran kode autentikasi server

Jika server Anda perlu mengakses Google API lainnya, seperti Google Drive, Youtube, atau Kontak, gunakan alur kode autentikasi server .

Untuk bermigrasi ke alur kode autentikasi server, lakukan perubahan berikut:

Sisi klien Android

  • Hapus GET_ACCOUNTS (Kontak) jika Anda memintanya
  • Ganti kode apa pun menggunakan GoogleAuthUtil , Plus.API , AccountPicker.newChooseAccountIntent() , atau AccountManager.newChooseAccountIntent() ke Auth.GOOGLE_SIGN_IN_API dengan Auth.GOOGLE_SIGN_IN_API GoogleSignInOptions.Builder.requestServerAuthCode(...) .

Sisi server

Anda masih dapat berbagi logika akses API antara titik akhir lama dan baru Anda. Sebagai contoh:

GoogleTokenResponse tokenResponse = new GoogleAuthorizationCodeTokenRequest(...);
String accessToken = tokenResponse.getAccessToken();
String refreshToken = tokenResponse.getRefreshToken();
Long expiresInSeconds = tokenResponse.getExpiresInSeconds();

// Shared by your old and new implementation, old endpoint can pass null for refreshToken
private void driveAccess(String refreshToken, String accessToken, Long expiresInSeconds) {
   GoogleCredential credential = new GoogleCredential.Builder()
           .setTransPort(...)
           ...
           .build();
   credential.setAccessToken(accessToken);
   credential.setExpiresInSeconds(expiresInSeconds);
   credential.setRefreshToken(refreshToken);
}

Bermigrasi dari aliran token ID GoogleAuthUtil

Jika Anda menggunakan GoogleAuthUtil untuk mendapatkan token ID, Anda harus bermigrasi ke aliran token ID API Masuk yang baru.

Misalnya, jika kode Android Anda terlihat seperti contoh berikut, Anda harus bermigrasi:

Kode Android

Dalam contoh, permintaan token ID menggunakan audience:server:client_id ditambah client ID untuk server web Anda sebagai parameter 'scope' untuk panggilan GoogleAuthUtil.getToken ( audience:server:client_id:9414861317621.apps.googleusercontent.com ).

Alur token ID API Masuk yang baru memiliki manfaat berikut:

  • Pengalaman masuk sekali ketuk yang disederhanakan
  • Server Anda bisa mendapatkan informasi profil pengguna tanpa panggilan jaringan tambahan

Untuk bermigrasi ke aliran token ID, lakukan perubahan berikut:

Sisi klien Android

  • Hapus GET_ACCOUNTS (Kontak) jika Anda memintanya
  • Ganti kode apa pun menggunakan GoogleAuthUtil , Plus.API , AccountPicker.newChooseAccountIntent() , atau AccountManager.newChooseAccountIntent() ke Auth.GOOGLE_SIGN_IN_API dengan Auth.GOOGLE_SIGN_IN_API GoogleSignInOptions.Builder.requestIdToken(...) .

Sisi server

API Masuk yang baru mengeluarkan token ID yang sesuai dengan spesifikasi OpenID Connect, tidak seperti GoogleAuthUtil.getToken , yang menggunakan format yang tidak digunakan lagi. Secara khusus, penerbitnya sekarang adalah https://accounts.google.com , dengan skema https .

Selama proses migrasi, server Anda perlu memverifikasi token ID dari klien Android lama dan baru Anda. Untuk memverifikasi kedua format token, buat perubahan yang sesuai dengan pustaka klien yang Anda gunakan (jika Anda menggunakannya):

  • Java (Library Klien Google API): tingkatkan ke 1.21.0 atau yang lebih baru
  • PHP (Library Klien Google API): jika Anda menggunakan v1, tingkatkan ke 1.1.6 atau yang lebih baru; jika Anda menggunakan v2, tingkatkan ke 2.0.0-RC1 atau yang lebih baru
  • Node.js: tingkatkan ke 0.9.7 atau yang lebih baru
  • Python atau penerapan Anda sendiri: terima kedua penerbit ini: https://accounts.google.com dan accounts.google.com

Migrasikan dari alur kode autentikasi server GoogleAuthUtil

Jika Anda menggunakan GoogleAuthUtil untuk mendapatkan kode GoogleAuthUtil server, Anda harus bermigrasi ke alur kode autentikasi API Masuk yang baru.

Misalnya, jika kode Android Anda terlihat seperti contoh berikut, Anda harus bermigrasi:

Kode Android

Dalam contoh ini, permintaan kode server auth menggunakan oauth2:server:client_id + ID klien untuk server web Anda sebagai scope parameter untuk GoogleAuthUtil.getToken panggilan ( oauth2:server:client_id:9414861317621.apps.googleusercontent.com ).

Alur kode autentikasi API Masuk yang baru memiliki manfaat sebagai berikut:

  • Pengalaman masuk sekali ketuk yang disederhanakan
  • Jika Anda mengikuti panduan migrasi di bawah ini, server Anda bisa mendapatkan token ID yang berisi informasi profil pengguna saat Anda melakukan pertukaran kode autentikasi

Untuk bermigrasi ke alur kode autentikasi baru, lakukan perubahan berikut:

Sisi klien Android

  • Hapus GET_ACCOUNTS (Kontak) jika Anda memintanya
  • Ganti kode apa pun menggunakan GoogleAuthUtil , Plus.API , AccountPicker.newChooseAccountIntent() , atau AccountManager.newChooseAccountIntent() ke Auth.GOOGLE_SIGN_IN_API dengan Auth.GOOGLE_SIGN_IN_API GoogleSignInOptions.Builder.requestServerAuthCode(...) .

Sisi server

Pertahankan kode Anda saat ini, tetapi tentukan https://oauth2.googleapis.com/token sebagai titik akhir server token saat membuat objek GoogleAuthorizationCodeTokenRequest , sehingga Anda bisa mendapatkan token ID dengan email pengguna, ID pengguna, dan info profil tanpa perlu panggilan jaringan lain. Endpoint ini sepenuhnya kompatibel dengan versi sebelumnya, dan kode di bawah ini akan berfungsi untuk kode autentikasi server yang diambil dari implementasi klien Android lama dan baru Anda.

GoogleTokenResponse tokenResponse = new GoogleAuthorizationCodeTokenRequest(
                transport,
                jsonFactory,
                // Use below for tokenServerEncodedUrl parameter
                "https://oauth2.googleapis.com/token",
                clientSecrets.getDetails().getClientId(),
                clientSecrets.getDetails().getClientSecret(),
                authCode,
                REDIRECT_URI)
               .execute();

...

// You can also get an ID token from auth code exchange.
GoogleIdToken googleIdToken = tokenResponse.parseIdToken();
GoogleIdTokenVerifier verifier = new GoogleIdTokenVerifier.Builder(transport, jsonFactory)
        .setAudience(Arrays.asList(SERVER_CLIENT_ID))
        .setIssuer("https://accounts.google.com")
        .build();
// Refer to ID token documentation to see how to get data from idToken object.
GoogleIdToken idToken = verifier.verify(idTokenString);
...