Jika sebelumnya Anda melakukan integrasi dengan Login dengan Google menggunakan
GoogleAuthUtil.getToken
atau Plus.API
, Anda harus bermigrasi ke Sign-In API
terbaru untuk mendapatkan keamanan yang lebih baik dan pengalaman pengguna yang lebih baik.
Bermigrasi dari antipola token akses
Anda tidak boleh mengirim token akses yang diperoleh dengan GoogleAuthUtil.getToken
ke
server backend sebagai pernyataan identitas, karena Anda tidak dapat dengan mudah memverifikasi
bahwa token telah diterbitkan ke backend, sehingga Anda rentan terhadap penyisipan
token akses dari penyerang.
Misalnya, jika kode Android Anda terlihat seperti contoh di bawah, Anda harus memigrasikan aplikasi ke praktik terbaik saat ini.
Dalam contoh, permintaan token akses menggunakan oauth2:
ditambah string cakupan sebagai
parameter scope
untuk panggilan GoogleAuthUtil.getToken
(oauth2:https://www.googleapis.com/auth/plus.login
).
Alih-alih mengautentikasi dengan token akses yang diperoleh dengan
GoogleAuthUtil.getToken
, gunakan alur token ID atau alur kode autentikasi.
Bermigrasi ke alur token ID
Jika yang Anda butuhkan hanyalah ID, alamat email, nama, atau URL foto profil pengguna, gunakan alur token ID.
Untuk bermigrasi ke alur token ID, lakukan perubahan berikut:
Sisi klien Android
- Menghapus izin
GET_ACCOUNTS
(Kontak) jika Anda memintanya - Alihkan kode apa pun yang menggunakan
GoogleAuthUtil
,Plus.API
,AccountPicker.newChooseAccountIntent()
, atauAccountManager.newChooseAccountIntent()
keAuth.GOOGLE_SIGN_IN_API
dengan konfigurasiGoogleSignInOptions.Builder.requestIdToken(...)
.
Sisi server
- Buat endpoint baru untuk Autentikasi token ID
- Menonaktifkan endpoint lama setelah aplikasi klien dimigrasikan
Bermigrasi ke alur 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 izin
GET_ACCOUNTS
(Kontak) jika Anda memintanya - Alihkan kode apa pun yang menggunakan
GoogleAuthUtil
,Plus.API
,AccountPicker.newChooseAccountIntent()
, atauAccountManager.newChooseAccountIntent()
keAuth.GOOGLE_SIGN_IN_API
dengan konfigurasiGoogleSignInOptions.Builder.requestServerAuthCode(...)
.
Sisi server
- Membuat endpoint baru untuk alur kode autentikasi server
- Menonaktifkan endpoint lama setelah aplikasi klien dimigrasikan
Anda tetap dapat membagikan logika akses API antara endpoint lama dan baru. 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 alur token ID GoogleAuthUtil
Jika menggunakan GoogleAuthUtil
untuk mendapatkan token ID, Anda harus bermigrasi ke
alur token ID Sign-In API baru.
Misalnya, jika kode Android Anda terlihat seperti contoh berikut, Anda harus melakukan migrasi:
Dalam contoh, permintaan token ID menggunakan audience:server:client_id
ditambah
client ID untuk server web Anda sebagai parameter 'cakupan' untuk
panggilan GoogleAuthUtil.getToken
(audience:server:client_id:9414861317621.apps.googleusercontent.com
).
Alur token ID Sign-In API yang baru memiliki manfaat berikut:
- Pengalaman login sekali ketuk yang disederhanakan
- Server Anda bisa mendapatkan informasi profil pengguna tanpa panggilan jaringan tambahan
Untuk bermigrasi ke alur token ID, lakukan perubahan berikut:
Sisi klien Android
- Menghapus izin
GET_ACCOUNTS
(Kontak) jika Anda memintanya - Alihkan kode apa pun yang menggunakan
GoogleAuthUtil
,Plus.API
,AccountPicker.newChooseAccountIntent()
, atauAccountManager.newChooseAccountIntent()
keAuth.GOOGLE_SIGN_IN_API
dengan konfigurasiGoogleSignInOptions.Builder.requestIdToken(...)
.
Sisi server
Sign-In API baru menerbitkan token ID yang mematuhi spesifikasi
OpenID Connect, tidak seperti GoogleAuthUtil.getToken
, yang menggunakan format yang tidak digunakan lagi.
Secara khusus, penerbit kini adalah https://accounts.google.com
, dengan skema
https
.
Selama proses migrasi, server Anda perlu memverifikasi token ID dari klien Android lama dan baru. Untuk memverifikasi kedua format token, buat perubahan yang sesuai dengan library klien yang Anda gunakan (jika Anda menggunakannya):
- Java (Library Klien Google API): upgrade ke 1.21.0 atau yang lebih baru
- PHP (Library Klien Google API): jika Anda menggunakan v1, upgrade ke 1.1.6 atau yang lebih baru; jika Anda menggunakan v2, upgrade ke 2.0.0-RC1 atau yang lebih baru
- Node.js: upgrade ke 0.9.7 atau yang lebih baru
- Python atau implementasi Anda sendiri: menerima kedua penerbit ini:
https://accounts.google.com
danaccounts.google.com
Bermigrasi dari alur kode autentikasi server GoogleAuthUtil
Jika Anda menggunakan GoogleAuthUtil
untuk mendapatkan kode autentikasi server, Anda harus bermigrasi ke alur kode autentikasi Sign-In API yang baru.
Misalnya, jika kode Android Anda terlihat seperti contoh berikut, Anda harus melakukan migrasi:
Dalam contoh, permintaan kode autentikasi server menggunakan oauth2:server:client_id
+
client ID untuk server web Anda sebagai parameter scope
untuk
panggilan GoogleAuthUtil.getToken
(oauth2:server:client_id:9414861317621.apps.googleusercontent.com
).
Alur kode autentikasi Sign-In API yang baru memiliki manfaat berikut:
- Pengalaman login sekali ketuk yang disederhanakan
- Jika Anda mengikuti panduan migrasi di bawah, 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 izin
GET_ACCOUNTS
(Kontak) jika Anda memintanya - Alihkan kode apa pun yang menggunakan
GoogleAuthUtil
,Plus.API
,AccountPicker.newChooseAccountIntent()
, atauAccountManager.newChooseAccountIntent()
keAuth.GOOGLE_SIGN_IN_API
dengan konfigurasiGoogleSignInOptions.Builder.requestServerAuthCode(...)
.
Sisi server
Simpan kode Anda saat ini, tetapi tentukan https://oauth2.googleapis.com/token
sebagai endpoint server token saat membuat objek GoogleAuthorizationCodeTokenRequest
, sehingga Anda bisa mendapatkan token ID dengan email, ID pengguna, dan info profil pengguna tanpa memerlukan panggilan jaringan lainnya. Endpoint ini sepenuhnya kompatibel dengan versi sebelumnya, dan kode di bawah
akan berfungsi untuk kode autentikasi server yang diambil dari implementasi klien Android
lama dan baru.
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); ...