Peringatan: Data ini disediakan menurut Kebijakan Data Pengguna Google . Harap tinjau dan patuhi kebijakan. Kegagalan untuk melakukannya dapat mengakibatkan penangguhan proyek atau penangguhan akun.

Login Akun Tertaut

Penautan Akun Google memungkinkan pemegang Akun Google terhubung ke layanan Anda serta berbagi data dengan Google secara cepat, lancar, dan aman.

Login Akun Tertaut memungkinkan Login Sekali Ketuk Dengan Google untuk pengguna yang sudah menautkan Akun Google mereka ke layanan Anda. Hal ini meningkatkan pengalaman pengguna karena mereka dapat login dengan sekali klik, tanpa perlu memasukkan ulang nama pengguna dan sandi. Tindakan ini juga mengurangi kemungkinan pengguna membuat akun duplikat di layanan Anda.

Persyaratan

Untuk menerapkan Login Akun Tertaut, Anda harus memenuhi persyaratan berikut:

  • Anda memiliki penerapan Penautan OAuth Akun Google yang mendukung alur kode otorisasi OAuth 2.0. Penerapan OAuth Anda harus menyertakan endpoint berikut:
    • endpoint otorisasi untuk menangani permintaan otorisasi.
    • endpoint token untuk menangani permintaan akses dan token refresh.
    • userinfo endpoint untuk mengambil informasi akun dasar tentang pengguna tertaut yang ditampilkan kepada pengguna selama proses Login Akun Tertaut.
  • Anda memiliki aplikasi Android.

Cara kerjanya

Prasyarat : Pengguna sebelumnya telah menautkan Akun Google dengan akun mereka di layanan Anda.

  1. Anda memilih untuk menampilkan akun tertaut selama alur Login Sekali Ketuk.
  2. Pengguna akan melihat perintah Login Sekali Ketuk dengan opsi untuk login ke layanan dengan akun tertaut mereka.
  3. Jika pengguna memilih untuk melanjutkan dengan akun tertaut, Google akan mengirim permintaan ke endpoint token Anda untuk menyimpan kode otorisasi. Permintaan berisi token akses pengguna yang diterbitkan oleh layanan Anda dan kode otorisasi Google.
  4. Anda menukar kode otorisasi Google dengan token ID Google yang berisi informasi tentang akun Google pengguna.
  5. Aplikasi Anda juga akan menerima token ID saat alur selesai dan Anda mencocokkannya dengan ID pengguna di token ID yang diterima server Anda untuk memasukkan pengguna ke aplikasi Anda.
Login Akun Tertaut.
Gambar 1. Alur Login Akun Tertaut. Jika memiliki beberapa akun yang login di perangkat, pengguna mungkin melihat pemilih akun dan hanya diarahkan ke tampilan Login Akun Tertaut jika memilih akun tertaut.

Menerapkan Login Akun Tertaut di aplikasi Android

Untuk mendukung Login Akun Tertaut di aplikasi Android, ikuti petunjuk di panduan penerapan Android.

Menangani permintaan kode otorisasi dari Google

Google membuat permintaan POST ke endpoint token untuk menyimpan kode otorisasi yang Anda tukarkan dengan token ID pengguna. Permintaan berisi token akses pengguna dan kode otorisasi OAuth2 yang diterbitkan Google.

Sebelum menyimpan kode otorisasi, Anda harus memverifikasi bahwa token akses diberikan oleh Anda kepada Google, yang diidentifikasi oleh client_id.

Permintaan HTTP

Permintaan sampel

POST /token HTTP/1.1
Host: server.example.com
Content-Type: application/x-www-form-urlencoded

code=GOOGLE_AUTHORIZATION_CODE
&grant_type=urn:ietf:params:oauth:grant-type:reciprocal
&client_id=CLIENT_ID
&client_secret=CLIENT_SECRET
&access_token=ACCESS_TOKEN

Endpoint pertukaran token Anda harus dapat menangani parameter permintaan berikut:

Parameter endpoint token
code Kode otorisasi Google OAuth2 wajib
client_id Client ID wajib yang Anda berikan ke Google
client_secret Wajib Rahasia klien yang Anda berikan ke Google
access_token Diperlukan Token akses yang Anda berikan ke Google. Anda akan menggunakan ini untuk mendapatkan konteks pengguna
grant_type Wajib Nilai HARUS ditetapkan ke urn:ietf:params:oauth:grant-type:reciprocal

Endpoint pertukaran token harus merespons permintaan POST dengan melakukan hal berikut:

  • Verifikasi bahwa access_token diberikan kepada Google yang diidentifikasi oleh client_id.
  • Respons dengan respons HTTP 200 (OK) jika permintaan valid dan kode autentikasi berhasil ditukarkan dengan token ID Google, atau kode error HTTP jika permintaan tidak valid.

Respons HTTP

Berhasil

Kembalikan kode status HTTP 200 OK

Contoh respons sukses
HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-store
Pragma: no-cache
{}

Error

Jika terjadi permintaan HTTP yang tidak valid, respons dengan salah satu kode error HTTP berikut:

Kode Status HTTP Isi Deskripsi
400 {"error": "invalid_request"} Permintaan tidak memiliki parameter sehingga server tidak dapat melanjutkan permintaan. Ini juga dapat ditampilkan jika permintaan menyertakan parameter yang tidak didukung atau mengulangi parameter
401 {"error": "invalid_request"} Autentikasi klien gagal, misalnya jika permintaan berisi client ID atau rahasia klien yang tidak valid
401 {"error": "invalid_token"}

Sertakan "WWW-Authentication: Bearer" tantangan autentikasi di header respons

Token akses partner tidak valid.
403 {"error": "insufficient_permission"}

Sertakan "WWW-Authentication: Bearer" tantangan autentikasi di header respons

Token akses partner tidak berisi cakupan yang diperlukan untuk menjalankan OAuth Timbal balik
500 {"error": "internal_error"} Error server

Respons error harus berisi kolom berikut :

Kolom respons error
error String error Wajib
error_description Deskripsi error yang dapat dibaca manusia
error_uri URI yang memberikan detail lebih lanjut tentang error
Contoh respons 400 error
HTTP/1.1 400 Bad Request
Content-Type: application/json;charset=UTF-8
Cache-Control: no-store
Pragma: no-cache

{
  "error": "invalid_request",
  "error_description": "Request was missing the 'access_token' parameter."
}

Kode otorisasi bursa untuk token ID

Anda perlu menukar kode otorisasi yang Anda terima dengan token ID Google yang berisi informasi tentang akun Google pengguna.

Untuk menukar kode otorisasi dengan token ID Google, panggil endpoint https://oauth2.googleapis.com/token dan tetapkan parameter berikut:

Kolom permintaan
client_id Wajib Client ID yang diperoleh dari halaman Kredensial Konsol API. Ini biasanya akan menjadi kredensial dengan nama New Actions on Google App
client_secret Wajib Rahasia klien yang diperoleh dari halaman Kredensial Konsol API
code Wajib Kode otorisasi yang dikirim dalam permintaan awal
grant_type Wajib Seperti yang ditentukan dalam spesifikasi OAuth 2.0, nilai kolom ini harus ditetapkan ke authorization_code.
Permintaan sampel
POST /oauth2/v4/token HTTP/1.1
Host: www.googleapis.com
Content-Type: application/x-www-form-urlencoded

code=GOOGLE_AUTHORIZATION_CODE
&grant_type=authorization_code
&client_id=GOOGLE_CLIENT_ID
&client_secret=GOOGLE_CLIENT_SECRET

Google merespons permintaan ini dengan menampilkan objek JSON yang berisi token akses berumur pendek dan token refresh.

Respons berisi kolom berikut:

Kolom respons
access_token Token akses yang dikeluarkan Google yang dikirim aplikasi Anda untuk mengotorisasi permintaan Google API
id_token Token ID berisi informasi Akun Google pengguna. Bagian Validasi Respons berisi detail tentang cara mendekode dan memvalidasi respons token ID
expires_in Sisa masa pakai token akses dalam hitungan detik
refresh_token Token yang dapat Anda gunakan untuk mendapatkan token akses baru. Token refresh valid hingga pengguna mencabut akses
scope Nilai kolom ini selalu disetel ke openid untuk kasus penggunaan Login Akun Tertaut
token_type Jenis token yang ditampilkan. Saat ini, nilai kolom ini selalu disetel ke Bearer
Contoh respons
HTTP/1.1 200 OK
Content-type: application/json; charset=utf-8

{
  "access_token": "Google-access-token",
  "id_token": "Google-ID-token",
  "expires_in": 3599,
  "token_type": "Bearer",
  "scope": "openid",
  "refresh_token": "Google-refresh-token"
}


POST /oauth2/v4/token HTTP/1.1
Host: www.googleapis.com
Content-Type: application/x-www-form-urlencoded

code=Google authorization code
&grant_type=authorization_code
&client_id=Google client id
&client_secret=Google client secret

Memvalidasi respons Token ID

Validasi dan dekode pernyataan JWT

Anda dapat memvalidasi dan mendekode pernyataan JWT dengan menggunakan perpustakaan decoding JWT untuk bahasa Anda . Gunakan kunci publik Google, tersedia dalam format JWK atau PEM , untuk memverifikasi tanda tangan token.

Saat didekodekan, pernyataan JWT terlihat seperti contoh berikut:

{
  "sub": "1234567890",      // The unique ID of the user's Google Account
  "iss": "https://accounts.google.com",        // The assertion's issuer
  "aud": "123-abc.apps.googleusercontent.com", // Your server's client ID
  "iat": 233366400,         // Unix timestamp of the assertion's creation time
  "exp": 233370000,         // Unix timestamp of the assertion's expiration time
  "name": "Jan Jansen",
  "given_name": "Jan",
  "family_name": "Jansen",
  "email": "jan@gmail.com", // If present, the user's email address
  "email_verified": true,   // true, if Google has verified the email address
  "hd": "example.com",      // If present, the host domain of the user's GSuite email address
                            // If present, a URL to user's profile picture
  "picture": "https://lh3.googleusercontent.com/a-/AOh14GjlTnZKHAeb94A-FmEbwZv7uJD986VOF1mJGb2YYQ",
  "locale": "en_US"         // User's locale, from browser or phone settings
}

Selain memverifikasi tanda tangan token, verifikasi bahwa penerbit pernyataan (bidang iss ) adalah https://accounts.google.com , bahwa audiens (bidang aud ) adalah ID klien yang Anda tetapkan, dan bahwa token belum kedaluwarsa ( exp bidang).

Dengan menggunakan bidang email , email_verified , dan hd Anda dapat menentukan apakah Google menghosting dan berwenang untuk sebuah alamat email. Jika Google berwenang, pengguna saat ini diketahui sebagai pemilik akun yang sah dan Anda dapat melewati sandi atau metode tantangan lainnya. Jika tidak, metode ini dapat digunakan untuk memverifikasi akun sebelum menautkan.

Kasus di mana Google berwibawa:

  • email memiliki akhiran @gmail.com , ini adalah akun Gmail.
  • email_verified benar dan hd disetel, ini adalah akun G Suite.

Pengguna dapat mendaftar untuk Akun Google tanpa menggunakan Gmail atau G Suite. Jika email tidak berisi akhiran @gmail.com dan hd tidak ada, Google tidak berwibawa dan sandi atau metode tantangan lainnya disarankan untuk memverifikasi pengguna. email_verfied juga bisa benar karena Google awalnya memverifikasi pengguna saat akun Google dibuat, namun kepemilikan akun email pihak ketiga mungkin telah berubah.