Autentikasi menentukan identitas seseorang, dan biasanya disebut sebagai pendaftaran atau login pengguna. Otorisasi adalah proses pemberian atau penolakan akses ke data atau resource. Misalnya, aplikasi Anda meminta izin pengguna untuk mengakses Google Drive pengguna.
Panggilan autentikasi dan otorisasi harus berupa dua alur terpisah dan berbeda berdasarkan kebutuhan aplikasi.
Jika aplikasi Anda memiliki fitur yang dapat menggunakan data Google API, tetapi tidak diperlukan sebagai bagian dari fitur inti aplikasi, Anda harus mendesain aplikasi agar dapat menangani kasus dengan baik saat data API tidak dapat diakses. Misalnya, Anda dapat menyembunyikan daftar file yang baru disimpan saat pengguna belum memberikan akses Drive.
Anda harus meminta akses ke cakupan yang diperlukan untuk mengakses Google API hanya saat pengguna melakukan tindakan yang memerlukan akses ke API tertentu. Misalnya, Anda harus meminta izin untuk mengakses Drive pengguna setiap kali pengguna mengetuk tombol "Simpan ke Drive".
Dengan memisahkan otorisasi dari autentikasi, Anda dapat menghindari pengguna baru yang merasa kewalahan, atau membingungkan pengguna tentang alasan mereka diminta untuk memberikan izin tertentu.
Untuk autentikasi, sebaiknya gunakan Credential Manager API. Untuk tindakan otorisasi yang memerlukan akses ke data pengguna yang disimpan oleh Google, sebaiknya gunakan AuthorizationClient.
Menyiapkan project
- Buka project Anda di , atau buat project jika Anda belum memilikinya.
- Di ,
pastikan semua informasi sudah lengkap dan akurat.
- Pastikan aplikasi Anda memiliki Nama Aplikasi, Logo Aplikasi, dan Halaman Beranda Aplikasi yang benar. Nilai ini akan ditampilkan kepada pengguna di layar izin Login dengan Google saat mendaftar dan layar Aplikasi & layanan pihak ketiga.
- Pastikan Anda telah menentukan URL kebijakan privasi dan persyaratan layanan aplikasi Anda.
- Di , buat ID klien Android untuk aplikasi Anda jika belum memilikinya. Anda harus menentukan nama paket dan tanda tangan SHA-1 aplikasi.
- Di , buat client ID "Aplikasi web" baru jika Anda belum melakukannya. Untuk saat ini, Anda dapat mengabaikan kolom "Authorized JavaScript Origins" dan "Authorized redirect URIs". Client ID ini akan digunakan untuk mengidentifikasi server backend Anda saat berkomunikasi dengan layanan autentikasi Google.
Mendeklarasikan dependensi
Dalam file build.gradle modul, deklarasikan dependensi menggunakan versi terbaru library Layanan Identitas Google.
dependencies {
// ... other dependencies
implementation "com.google.android.gms:play-services-auth:<latest version>"
}
Meminta izin yang diperlukan oleh tindakan pengguna
Setiap kali pengguna melakukan tindakan yang memerlukan cakupan tambahan, panggil
AuthorizationClient.authorize()
.
Misalnya, jika pengguna melakukan tindakan yang memerlukan akses ke penyimpanan aplikasi Drive-nya, lakukan hal berikut:
List<Scopes> requestedScopes = Arrays.asList(DriveScopes.DRIVE_APPDATA);
AuthorizationRequest authorizationRequest = AuthorizationRequest.builder().setRequestedScopes(requestedScopes).build();
Identity.getAuthorizationClient(this)
.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));
Dalam callback onActivityResult
aktivitas, Anda dapat memeriksa apakah izin
yang diperlukan berhasil diperoleh, dan jika ya, lakukan tindakan pengguna.
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == MainActivity.REQUEST_AUTHORIZE) {
AuthorizationResult authorizationResult = Identity.getAuthorizationClient(this).getAuthorizationResultFromIntent(data);
saveToDriveAppFolder(authorizationResult);
}
}
Jika mengakses Google API di sisi server, Anda dapat memanggil metode getServerAuthCode() dari AuthorizationResult untuk mendapatkan kode autentikasi yang Anda kirim ke backend untuk ditukar dengan token akses dan token refresh.