Penautan Akun Google dengan OAuth

Akun ditautkan menggunakan alur implisit dan kode otorisasi OAuth 2.0 standar industri. Layanan Anda harus mendukung endpoint otorisasi dan pertukaran token yang mematuhi OAuth 2.0.

Pada alur implisit, Google membuka endpoint otorisasi Anda di browser pengguna. Setelah berhasil login, Anda menampilkan token akses berumur panjang ke Google. Token akses ini sekarang disertakan dalam setiap permintaan yang dikirim dari Google.

Dalam alur kode otorisasi, Anda memerlukan dua endpoint:

  • Endpoint otorisasi, yang menampilkan UI login kepada pengguna yang belum login. Endpoint otorisasi juga membuat kode otorisasi berumur pendek untuk mencatat izin pengguna atas akses yang diminta.

  • Endpoint pertukaran token, yang bertanggung jawab untuk dua jenis pertukaran:

    1. Menukarkan kode otorisasi untuk token refresh yang berumur panjang dan token akses yang berumur pendek. Pertukaran ini terjadi saat pengguna melalui alur penautan akun.
    2. Menukarkan token refresh yang berumur panjang dengan token akses yang berumur pendek. Pertukaran ini terjadi jika Google memerlukan token akses baru karena token tersebut sudah tidak berlaku.

Memilih alur OAuth 2.0

Meskipun alur implisit lebih mudah diimplementasikan, Google merekomendasikan agar token akses yang dikeluarkan oleh alur implisit tidak pernah berakhir masa berlakunya. Hal ini karena pengguna dipaksa untuk menautkan akun lagi setelah token berakhir dengan alur implisit. Jika Anda memerlukan masa berlaku token untuk alasan keamanan, sebaiknya gunakan alur kode otorisasi.

Panduan desain

Bagian ini menjelaskan persyaratan desain dan rekomendasi untuk layar pengguna yang Anda hosting untuk alur penautan OAuth. Setelah dipanggil oleh aplikasi Google, platform Anda akan menampilkan halaman login ke halaman Google dan layar izin penautan akun kepada pengguna. Pengguna diarahkan kembali ke aplikasi Google setelah memberikan izin untuk menautkan akun.

Gambar ini menunjukkan langkah-langkah bagi pengguna untuk menautkan Akun Google mereka ke sistem autentikasi Anda. Screenshot pertama menunjukkan penautan yang dimulai pengguna dari platform Anda. Gambar kedua menunjukkan proses login pengguna ke Google, sementara gambar ketiga menunjukkan izin dan konfirmasi pengguna untuk menautkan Akun Google mereka ke aplikasi Anda. Screenshot terakhir menampilkan akun pengguna yang berhasil ditautkan di aplikasi Google.
Gambar 1. Pengguna yang menautkan akun login ke Google dan layar izin.

Persyaratan

  1. Anda harus menginformasikan bahwa akun pengguna akan ditautkan ke Google, bukan produk Google tertentu seperti Google Home atau Asisten Google.

Rekomendasi

Sebaiknya Anda melakukan hal berikut:

  1. Tampilkan Kebijakan Privasi Google. Sertakan link ke Kebijakan Privasi Google di layar izin.

  2. Data yang akan dibagikan. Gunakan bahasa yang jelas dan ringkas untuk memberi tahu pengguna data apa yang diperlukan Google beserta alasannya.

  3. Pesan ajakan (CTA) yang jelas. Nyatakan pesan ajakan (CTA) yang jelas di layar izin Anda, seperti “Setuju dan tautkan”. Hal ini karena pengguna perlu memahami data apa yang harus mereka bagikan kepada Google untuk menautkan akun mereka.

  4. Kemampuan untuk membatalkan. Berikan cara bagi pengguna untuk kembali atau membatalkan, jika mereka memilih untuk tidak menautkan.

  5. Hapus proses login. Pastikan bahwa pengguna memiliki metode yang jelas untuk login ke Akun Google mereka, seperti kolom untuk nama pengguna dan sandi mereka atau Login dengan Google.

  6. Kemampuan untuk membatalkan tautan. Tawarkan mekanisme bagi pengguna untuk membatalkan tautan, seperti URL ke setelan akun mereka di platform Anda. Atau, Anda dapat menyertakan link ke Akun Google tempat pengguna dapat mengelola akun tertaut mereka.

  7. Kemampuan untuk mengubah akun pengguna. Menyarankan metode bagi pengguna untuk berganti akun. Hal ini sangat bermanfaat jika pengguna cenderung memiliki beberapa akun.

    • Jika pengguna harus menutup layar izin untuk beralih akun, kirimkan error yang dapat dipulihkan ke Google sehingga pengguna dapat login ke akun yang diinginkan dengan penautan OAuth dan alur implisit.
  8. Sertakan logo. Menampilkan logo perusahaan di layar izin. Gunakan pedoman gaya untuk menempatkan logo Anda. Jika ingin menampilkan logo Google, lihat Logo dan merek dagang.

Membuat project

Untuk membuat project agar dapat menggunakan penautan akun:

  1. Go to the Google API Console.
  2. Klik Buat proyek .
  3. Masukkan nama atau terima saran yang dihasilkan.
  4. Konfirmasikan atau edit bidang yang tersisa.
  5. Klik Buat .

Untuk melihat ID proyek Anda:

  1. Go to the Google API Console.
  2. Temukan proyek Anda di tabel di halaman arahan. ID proyek muncul di kolom ID .

Proses Penautan Akun Google mencakup layar izin yang memberi tahu pengguna bahwa aplikasi meminta akses ke data mereka, jenis data apa yang mereka minta, dan persyaratan yang berlaku. Anda perlu mengonfigurasi layar izin OAuth sebelum membuat client ID Google API.

  1. Buka halaman OAuth consent screen dari konsol API Google.
  2. Jika diminta, pilih project yang baru saja Anda buat.
  3. Di halaman "Layar izin OAuth", isi formulir dan klik tombol "Simpan".

    Nama aplikasi: Nama aplikasi yang meminta izin. Nama harus mencerminkan aplikasi Anda secara akurat dan konsisten dengan nama aplikasi yang dilihat pengguna di tempat lain. Nama aplikasi akan ditampilkan di layar izin Penautan Akun.

    Logo aplikasi: Gambar di layar izin yang akan membantu pengguna mengenali aplikasi Anda. Logo ditampilkan di layar izin Penautan akun dan di setelan akun

    Email dukungan: Agar pengguna dapat menghubungi Anda jika ada pertanyaan tentang izin mereka.

    Cakupan untuk Google API: Cakupan memungkinkan aplikasi Anda mengakses data pribadi Google pengguna. Untuk kasus penggunaan Penautan Akun Google, cakupan default (email, profil, openid) sudah cukup, Anda tidak perlu menambahkan cakupan sensitif apa pun. Secara umum, praktik terbaiknya adalah meminta cakupan secara bertahap pada saat akses diperlukan, bukan sejak awal. Pelajari lebih lanjut.

    Domain yang diotorisasi: Untuk melindungi Anda dan pengguna, Google hanya mengizinkan aplikasi yang melakukan autentikasi menggunakan OAuth untuk menggunakan Domain yang Diotorisasi. Link aplikasi Anda harus dihosting di Authorized Domains. Pelajari lebih lanjut.

    Link Halaman Beranda Aplikasi: Halaman beranda aplikasi Anda. Harus dihosting di Domain yang Diotorisasi.

    Link Kebijakan Privasi Aplikasi: Ditampilkan di layar izin Penautan Akun Google. Harus dihosting di Domain yang Diotorisasi.

    Link Persyaratan Layanan Aplikasi (Opsional): Harus dihosting di Domain yang Diotorisasi.

    Gambar 1. Layar Izin Penautan Akun Google untuk Aplikasi fiktif, Tuner

  4. Periksa "Status Verifikasi", jika permohonan Anda memerlukan verifikasi, klik tombol "Kirim Untuk Verifikasi" untuk mengirimkan permohonan verifikasi. Lihat Persyaratan verifikasi OAuth untuk mengetahui detailnya.

Mengimplementasikan server OAuth

Untuk mendukung aliran implisit OAuth 2.0, layanan Anda membuat titik akhir otorisasi yang tersedia dengan HTTPS. Titik akhir ini bertanggung jawab untuk otentikasi dan memperoleh persetujuan dari pengguna untuk akses data. Titik akhir otorisasi menyajikan UI masuk ke pengguna Anda yang belum masuk dan mencatat persetujuan untuk akses yang diminta.

Saat aplikasi Google perlu memanggil salah satu API resmi layanan Anda, Google menggunakan titik akhir ini untuk mendapatkan izin dari pengguna Anda untuk memanggil API ini atas nama mereka.

Sesi alur implisit OAuth 2.0 tipikal yang diprakarsai oleh Google memiliki alur berikut:

  1. Google membuka titik akhir otorisasi Anda di browser pengguna. Pengguna masuk, jika belum masuk, dan memberikan izin kepada Google untuk mengakses data mereka dengan API Anda, jika mereka belum memberikan izin.
  2. Layanan Anda menciptakan token akses dan kembali ke Google. Untuk melakukannya, arahkan kembali browser pengguna ke Google dengan token akses yang dilampirkan pada permintaan.
  3. Google memanggil API layanan Anda dan melampirkan token akses dengan setiap permintaan. Layanan Anda memverifikasi bahwa token akses memberikan otorisasi kepada Google untuk mengakses API dan kemudian menyelesaikan panggilan API.

Menangani permintaan otorisasi

Saat aplikasi Google perlu melakukan penautan akun melalui alur implisit OAuth 2.0, Google mengirim pengguna ke titik akhir otorisasi Anda dengan permintaan yang menyertakan parameter berikut:

Parameter titik akhir otorisasi
client_id ID klien yang Anda tetapkan ke Google.
redirect_uri URL tujuan Anda mengirim tanggapan atas permintaan ini.
state Nilai pembukuan yang diteruskan kembali ke Google tidak berubah di URI pengalihan.
response_type Jenis nilai yang akan dikembalikan dalam respons. Untuk aliran implisit OAuth 2.0, jenis respon selalu token .
user_locale Akun Google pengaturan bahasa di RFC5646 format yang digunakan untuk melokalisasi konten Anda dalam bahasa pilihan pengguna.

Misalnya, jika endpoint otorisasi Anda tersedia di https://myservice.example.com/auth , permintaan akan terlihat seperti berikut ini:

GET https://myservice.example.com/auth?client_id=GOOGLE_CLIENT_ID&redirect_uri=REDIRECT_URI&state=STATE_STRING&response_type=token&user_locale=LOCALE

Agar titik akhir otorisasi Anda menangani permintaan masuk, lakukan langkah-langkah berikut:

  1. Verifikasi client_id dan redirect_uri nilai-nilai untuk mencegah memberikan akses ke aplikasi client yang tidak diinginkan atau salah konfigurasi:

    • Konfirmasi bahwa client_id sesuai dengan ID klien Anda ditugaskan untuk Google.
    • Konfirmasi bahwa URL yang ditentukan oleh redirect_uri parameter memiliki bentuk sebagai berikut:
      https://oauth-redirect.googleusercontent.com/r/YOUR_PROJECT_ID
      https://oauth-redirect-sandbox.googleusercontent.com/r/YOUR_PROJECT_ID
      
  2. Periksa apakah pengguna masuk ke layanan Anda. Jika pengguna tidak masuk, selesaikan alur masuk atau pendaftaran layanan Anda.

  3. Buat token akses untuk digunakan Google untuk mengakses API Anda. Token akses dapat berupa nilai string apa pun, tetapi harus secara unik mewakili pengguna dan klien yang menjadi tujuan token dan tidak boleh ditebak.

  4. Kirim respon HTTP yang mengarahkan browser pengguna ke URL yang ditentukan oleh redirect_uri parameter. Sertakan semua parameter berikut dalam fragmen URL:

    • access_token : Akses Token Anda hanya dihasilkan
    • token_type : String bearer
    • state : The dimodifikasi nilai negara dari permintaan asli

    Berikut ini adalah contoh dari URL yang dihasilkan:

    https://oauth-redirect.googleusercontent.com/r/YOUR_PROJECT_ID#access_token=ACCESS_TOKEN&token_type=bearer&state=STATE_STRING

Google OAuth 2.0 redirect handler menerima akses token dan menegaskan bahwa state nilai tidak berubah. Setelah Google memperoleh token akses untuk layanan Anda, Google melampirkan token ke panggilan berikutnya ke API layanan Anda.

Menangani permintaan info pengguna

The userinfo endpoint adalah sumber daya yang dilindungi OAuth 2.0 bahwa klaim pengembalian tentang pengguna terkait. Menerapkan dan menghosting endpoint userinfo adalah opsional, kecuali untuk kasus penggunaan berikut:

Setelah token akses berhasil diambil dari titik akhir token Anda, Google mengirimkan permintaan ke titik akhir info pengguna Anda untuk mengambil informasi profil dasar tentang pengguna yang ditautkan.

header permintaan endpoint userinfo
Authorization header Token akses tipe Bearer.

Misalnya, jika endpoint userinfo Anda tersedia di https://myservice.example.com/userinfo , permintaan akan terlihat seperti berikut ini:

GET /userinfo HTTP/1.1
Host: myservice.example.com
Authorization: Bearer ACCESS_TOKEN

Agar endpoint userinfo Anda menangani permintaan, lakukan langkah-langkah berikut:

  1. Ekstrak token akses dari header Otorisasi dan kembalikan informasi untuk pengguna yang terkait dengan token akses.
  2. Jika token akses tidak valid, mengembalikan HTTP 401 Unauthorized error dengan menggunakan WWW-Authenticate Respon header. Di bawah ini adalah contoh dari respon kesalahan userinfo:
    HTTP/1.1 401 Unauthorized
    WWW-Authenticate: error="invalid_token",
    error_description="The Access Token expired"
    
    Jika 401 tidak sah, atau respon kesalahan yang gagal lainnya dikembalikan selama proses menghubungkan, kesalahan akan non-dipulihkan, token yang diambil akan dibuang dan pengguna akan memiliki untuk memulai proses penautan lagi.
  3. Jika token akses valid, kembali dan HTTP 200 respon dengan objek JSON berikut dalam tubuh respon HTTPS:

    {
    "sub": "USER_UUID",
    "email": "EMAIL_ADDRESS",
    "given_name": "FIRST_NAME",
    "family_name": "LAST_NAME",
    "name": "FULL_NAME",
    "picture": "PROFILE_PICTURE",
    }
    
    Jika Anda userinfo titik akhir pengembalian respon sukses HTTP 200, diambil token dan klaim yang terdaftar terhadap pengguna Google Akun.

    tanggapan titik akhir info pengguna
    sub ID unik yang mengidentifikasi pengguna di sistem Anda.
    email Alamat email pengguna.
    given_name Opsional: Nama depan pengguna.
    family_name Opsional: Nama belakang pengguna.
    name Opsional: Nama lengkap dari pengguna.
    picture Opsional: Gambar riwayat pengguna.

Memvalidasi implementasi

Anda dapat memvalidasi implementasi Anda dengan menggunakan OAuth 2.0 Playground alat.

Pada alat, lakukan langkah-langkah berikut:

  1. Klik Konfigurasi untuk membuka jendela Configuration OAuth 2.0.
  2. Di bidang aliran OAuth, pilih Client-side.
  3. Di bidang OAuth endpoint, pilih Custom.
  4. Tentukan titik akhir OAuth 2.0 dan ID klien yang Anda tetapkan ke Google di bidang yang sesuai.
  5. Pada bagian Langkah 1, tidak memilih lingkup Google. Sebagai gantinya, biarkan bidang ini kosong atau ketik cakupan yang valid untuk server Anda (atau string arbitrer jika Anda tidak menggunakan cakupan OAuth). Setelah selesai, klik Otorisasi API.
  6. Dalam Langkah 2 dan Langkah 3 bagian, melalui aliran OAuth 2.0 dan memverifikasi bahwa setiap langkah bekerja sebagaimana dimaksud.

Anda dapat memvalidasi implementasi Anda dengan menggunakan Akun Google Menghubungkan Demo alat.

Pada alat, lakukan langkah-langkah berikut:

  1. Klik Sign-in dengan tombol Google.
  2. Pilih akun yang ingin Anda tautkan.
  3. Masukkan ID layanan.
  4. Secara opsional, masukkan satu atau beberapa cakupan yang akan Anda minta aksesnya.
  5. Klik Mulai Demo.
  6. Saat diminta, konfirmasikan bahwa Anda dapat menyetujui dan menolak permintaan penautan.
  7. Konfirmasikan bahwa Anda dialihkan ke platform Anda.