Penautan Akun Google memungkinkan pemegang Akun Google terhubung ke layanan Anda dengan cepat, lancar, dan aman serta berbagi data dengan Google.
Login Akun Tertaut memungkinkan Login Sekali Ketuk dengan Google untuk pengguna yang sudah menautkan Akun Google mereka ke layanan Anda. Tindakan ini meningkatkan pengalaman bagi pengguna karena mereka dapat login dengan sekali klik, tanpa perlu memasukkan kembali nama pengguna dan sandi mereka. Tindakan ini juga mengurangi kemungkinan pengguna membuat akun duplikat di layanan Anda.
Persyaratan
Untuk menerapkan Login dengan Akun Tertaut, Anda harus memenuhi persyaratan berikut:
- Anda memiliki implementasi Penautan OAuth Akun Google yang mendukung alur kode otorisasi OAuth 2.0. Implementasi OAuth Anda harus menyertakan endpoint berikut:
- endpoint otorisasi untuk menangani permintaan otorisasi.
- endpoint token untuk menangani permintaan akses dan token refresh.
- endpoint userinfo untuk mengambil informasi akun dasar tentang pengguna tertaut yang ditampilkan kepada pengguna selama proses Login dengan Akun Tertaut.
- Anda memiliki aplikasi Android.
Cara kerjanya
Prasyarat : Pengguna telah menautkan Akun Google mereka sebelumnya dengan akun mereka di layanan Anda.
- Anda memilih untuk menampilkan akun tertaut selama alur Login Sekali Ketuk.
- Pengguna akan melihat perintah Login Sekali Ketuk dengan opsi untuk login ke layanan Anda menggunakan akun tertaut miliknya.
- Jika pengguna memilih untuk melanjutkan dengan akun tertaut, Google akan mengirimkan permintaan ke endpoint token Anda untuk menyimpan kode otorisasi. Permintaan berisi token akses pengguna yang dikeluarkan oleh layanan Anda dan kode otorisasi Google.
- Anda menukar kode otorisasi Google dengan token ID Google yang berisi informasi tentang Akun Google pengguna.
- Aplikasi Anda juga menerima token ID saat alur selesai dan Anda mencocokkannya dengan ID pengguna dalam token ID yang diterima oleh server untuk memproses login pengguna ke aplikasi Anda.
Menerapkan Login dengan Akun Tertaut di aplikasi Android
Untuk mendukung Login dengan Akun Tertaut di aplikasi Android, ikuti petunjuk di panduan penerapan Android.
Menangani permintaan kode otorisasi dari Google
Google membuat permintaan POST ke endpoint token Anda 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 token akses yang Anda berikan ke 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 diisi |
client_id |
Client ID Wajib yang Anda berikan kepada Google |
client_secret |
Wajib Rahasia klien yang Anda berikan kepada Google |
access_token |
Wajib Akses token yang Anda berikan ke Google. Anda akan menggunakannya untuk mendapatkan konteks pengguna |
grant_type |
Nilai Wajib HARUS ditetapkan ke urn:ietf:params:oauth:grant-type:reciprocal |
Endpoint pertukaran token Anda harus merespons permintaan POST dengan melakukan hal berikut:
- Pastikan
access_token
telah diberikan kepada Google yang diidentifikasi olehclient_id
. - Tanggapi 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
Menampilkan 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 permintaan HTTP tidak valid, tanggapi 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. Kolom 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 yang tidak valid |
401 | {"error": "invalid_token"}
Sertakan "WWW-Authentication: Bearer" verifikasi login di header respons |
Token akses partner tidak valid. |
403 | {"error": "insufficient_permission"}
Sertakan "WWW-Authentication: Bearer" verifikasi login di header respons |
Token akses partner tidak berisi cakupan yang diperlukan untuk menjalankan OAuth Resiprokal |
500 | {"error": "internal_error"} |
Error server |
Respons error harus berisi kolom-kolom berikut :
Kolom respons error | |
---|---|
error |
Wajib String error |
error_description |
Deskripsi error yang dapat dibaca manusia |
error_uri |
URI yang memberikan detail selengkapnya tentang error |
Contoh respons error 400
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."
}
Tukar kode otorisasi dengan token ID
Anda harus 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 Credentials Konsol API. Ini biasanya akan menjadi kredensial dengan nama Aplikasi Actions on Google Baru |
client_secret |
Wajib Rahasia klien yang diperoleh dari halaman Credentials Konsol API |
code |
Wajib Kode otorisasi yang dikirim dalam permintaan awal |
grant_type |
Wajib Sebagaimana 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 dikirimkan aplikasi Anda untuk mengotorisasi permintaan API Google |
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 digunakan untuk mendapatkan token akses baru. Token refresh berlaku hingga pengguna mencabut akses |
scope |
Nilai kolom ini selalu ditetapkan ke openid untuk kasus penggunaan Login dengan Akun Tertaut |
token_type |
Jenis token yang ditampilkan. Saat ini, nilai kolom ini selalu ditetapkan 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
Validasi respons Token ID
Memvalidasi dan mendekode pernyataan JWT
Anda dapat memvalidasi dan mendekode pernyataan JWT menggunakan Library dekode JWT untuk bahasa Anda. Gunakan Kunci publik Google, tersedia di JWK atau format PEM, untuk memverifikasi tanda tangan token.
Saat didekode, pernyataan JWT akan 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 token
penerbit (kolom iss
) adalah https://accounts.google.com
, bahwa audiens
(kolom aud
) adalah client ID yang ditetapkan untuk Anda, dan masa berlaku token belum berakhir
(Kolom exp
).
Dengan menggunakan kolom email
, email_verified
, dan hd
, Anda dapat menentukan apakah
Google menghosting dan bersifat otoritatif untuk alamat email. Dalam kasus di mana Google
pengguna yang kredibel saat ini diketahui sebagai pemilik akun yang sah
dan Anda dapat melewati metode
{i>password<i} atau tantangan lainnya. Jika tidak, metode ini
dapat digunakan untuk memverifikasi akun sebelum penautan.
Kasus saat Google bersifat otoritatif:
email
memiliki akhiran@gmail.com
, ini adalah akun Gmail.email_verified
benar danhd
ditetapkan, ini adalah akun G Suite.
Pengguna dapat mendaftar ke Akun Google tanpa menggunakan Gmail atau G Suite. Kapan
email
tidak berisi akhiran @gmail.com
dan hd
tidak ada Google tidak
otoritatif, dan menggunakan {i>password<i}
atau metode verifikasi lainnya disarankan untuk
pengguna. email_verified
juga bisa benar karena Google awalnya memverifikasi
pengguna saat Akun Google dibuat, namun kepemilikan pihak ketiga
akun email Anda mungkin telah berubah.