Menggunakan OAuth 2.0 dengan Library Klien Google API untuk Java

Ringkasan

Tujuan: Dokumen ini menjelaskan cara menggunakan class utilitas GoogleCredential untuk melakukan otorisasi OAuth 2.0 dengan layanan Google. Untuk informasi tentang fungsi OAuth 2.0 generik yang kami sediakan, lihat OAuth 2.0 dan Library Klien OAuth Google untuk Java.

Ringkasan: Untuk mengakses data terlindungi yang disimpan di layanan Google, gunakan OAuth 2.0 untuk otorisasi. Google API mendukung alur OAuth 2.0 untuk berbagai jenis aplikasi klien. Dalam semua alur ini, aplikasi klien meminta token akses yang hanya terkait dengan aplikasi klien Anda dan pemilik data yang dilindungi yang sedang diakses. Token akses juga dikaitkan dengan cakupan terbatas yang menentukan jenis data yang dapat diakses oleh aplikasi klien Anda (misalnya, "Kelola tugas Anda"). Tujuan penting OAuth 2.0 adalah untuk memberikan akses yang aman dan nyaman ke data yang dilindungi, sekaligus meminimalkan potensi dampak jika token akses dicuri.

Paket OAuth 2.0 di Library Klien Google API untuk Java dibangun berdasarkan Library Klien OAuth 2.0 Google untuk Java serbaguna.

Untuk mengetahui detailnya, lihat dokumentasi Javadoc untuk paket berikut:

Konsol API Google

Sebelum dapat mengakses Google API, Anda perlu menyiapkan project di Konsol API Google untuk tujuan otorisasi dan penagihan, baik klien Anda adalah aplikasi yang diinstal, aplikasi seluler, server web, atau klien yang berjalan di browser.

Untuk mengetahui petunjuk tentang cara menyiapkan kredensial dengan benar, lihat Bantuan Konsol API.

Kredensial

GoogleCredential

GoogleCredential adalah class helper yang aman untuk thread untuk OAuth 2.0 dalam mengakses resource yang dilindungi menggunakan token akses. Misalnya, jika sudah memiliki token akses, Anda dapat membuat permintaan dengan cara berikut:

GoogleCredential credential = new GoogleCredential().setAccessToken(accessToken);
Plus plus = new Plus.builder(new NetHttpTransport(),
                             GsonFactory.getDefaultInstance(),
                             credential)
    .setApplicationName("Google-PlusSample/1.0")
    .build();

Identitas Google App Engine

Kredensial alternatif ini didasarkan pada Google App Engine App Identity Java API. Tidak seperti kredensial yang digunakan aplikasi klien untuk meminta akses ke data pengguna akhir, App Identity API memberikan akses ke data aplikasi klien itu sendiri.

Gunakan AppIdentityCredential (dari google-api-client-appengine). Kredensial ini jauh lebih sederhana karena Google App Engine menangani semua detailnya. Anda hanya menentukan cakupan OAuth 2.0 yang Anda butuhkan.

Contoh kode yang diambil dari urlshortener-robots-appengine-sample:

static Urlshortener newUrlshortener() {
  AppIdentityCredential credential =
      new AppIdentityCredential(
          Collections.singletonList(UrlshortenerScopes.URLSHORTENER));
  return new Urlshortener.Builder(new UrlFetchTransport(),
                                  GsonFactory.getDefaultInstance(),
                                  credential)
      .build();
}

Penyimpanan data

Token akses biasanya memiliki tanggal habis masa berlaku 1 jam, setelah itu Anda akan mendapatkan error jika mencoba menggunakannya. GoogleCredential akan menangani "refresh" token secara otomatis, yang berarti hanya mendapatkan token akses baru. Hal ini dilakukan dengan menggunakan token refresh yang berlaku lama, yang biasanya diterima bersama dengan token akses jika Anda menggunakan parameter access_type=offline selama alur kode otorisasi (lihat GoogleAuthorizationCodeFlow.Builder.setAccessType(String)).

Sebagian besar aplikasi perlu mempertahankan token akses dan/atau token refresh kredensial. Untuk mempertahankan akses dan/atau token refresh kredensial, Anda dapat menyediakan implementasi DataStoreFactory sendiri dengan StoredCredential; atau Anda dapat menggunakan salah satu implementasi berikut yang disediakan oleh library:

Pengguna AppEngine: AppEngineCredentialStore tidak digunakan lagi dan akan segera dihapus. Sebaiknya Anda menggunakan AppEngineDataStoreFactory dengan StoredCredential. Jika memiliki kredensial yang disimpan dengan cara lama, Anda dapat menggunakan metode bantuan yang ditambahkan migrateTo(AppEngineDataStoreFactory) atau migrateTo(DataStore) untuk melakukan migrasi.

Anda dapat menggunakan DataStoreCredentialRefreshListener dan menyetelnya untuk kredensial menggunakan GoogleCredential.Builder.addRefreshListener(CredentialRefreshListener)).

Alur kode otorisasi

Gunakan alur kode otorisasi untuk mengizinkan pengguna akhir memberikan akses aplikasi Anda ke data terlindung mereka di Google API. Protokol untuk alur ini ditentukan dalam Authorization Code Grant.

Alur ini diimplementasikan menggunakan GoogleAuthorizationCodeFlow. Langkah-langkahnya adalah:

  • Pengguna akhir login ke aplikasi Anda. Anda harus mengaitkan pengguna tersebut dengan ID pengguna yang unik untuk aplikasi Anda.
  • Panggil AuthorizationCodeFlow.loadCredential(String)) berdasarkan ID pengguna untuk memeriksa apakah kredensial pengguna akhir sudah diketahui. Jika ya, kita sudah selesai.
  • Jika tidak, panggil AuthorizationCodeFlow.newAuthorizationUrl() dan arahkan browser pengguna akhir ke halaman otorisasi untuk memberikan akses aplikasi Anda ke data terlindung mereka.