Setiap Tindakan smart home harus menyertakan mekanisme untuk mengautentikasi pengguna.
Autentikasi memungkinkan Anda menautkan Akun Google pengguna dengan akun pengguna di sistem autentikasi. Hal ini memungkinkan Anda mengidentifikasi pengguna saat fulfillment Anda menerima intent smart home. Smart home Google hanya mendukung OAuth dengan alur kode otorisasi.
Halaman ini menjelaskan cara menyiapkan server OAuth 2.0 agar berfungsi dengan Tindakan smart home Anda.
Penautan Akun Google dengan OAuth
Dalam alur kode otorisasi, Anda memerlukan dua endpoint:
Endpoint otorisasi, yang menampilkan UI login kepada pengguna Anda yang belum login. Endpoint otorisasi juga membuat kode otorisasi berumur pendek untuk merekam izin pengguna atas akses yang diminta.
Endpoint pertukaran token, yang bertanggung jawab atas dua jenis pertukaran:
- Menukarkan kode otorisasi dengan token refresh yang memiliki masa aktif lama dan token akses yang memiliki masa aktif singkat. Pertukaran ini terjadi saat pengguna melalui alur penautan akun.
- Menukarkan token refresh yang memiliki masa aktif lama dengan token akses yang memiliki masa aktif singkat. Pertukaran ini terjadi saat Google memerlukan token akses baru karena token tersebut telah habis masa berlakunya.
Panduan desain
Bagian ini menjelaskan persyaratan dan rekomendasi desain untuk layar pengguna yang Anda hosting untuk alur penautan OAuth. Setelah dipanggil oleh aplikasi Google, platform Anda akan menampilkan halaman login ke akun dan penautan izin akun Google kepada pengguna. Pengguna diarahkan kembali ke aplikasi Google setelah memberikan izin untuk menautkan akun.

Persyaratan
- Anda harus memberi tahu bahwa akun pengguna akan ditautkan ke Google, bukan produk Google tertentu seperti Google Home atau Asisten Google.
- Anda harus memiliki pernyataan otorisasi Google, seperti "Dengan login, Anda memberi otorisasi kepada Google untuk mengontrol perangkat Anda." Lihat bagian Otorisasi Kontrol Perangkat Google dalam Kebijakan Developer Google Home.
Rekomendasi
Sebaiknya Anda melakukan hal berikut:
Tampilkan Kebijakan Privasi Google. Sertakan link ke Kebijakan Privasi Google di layar izin.
Data yang akan dibagikan. Gunakan bahasa yang jelas dan ringkas untuk memberi tahu pengguna tentang data mereka yang diperlukan Google dan alasannya.
Pesan ajakan (CTA) yang jelas. Nyatakan pesan ajakan (CTA) yang jelas di layar izin, seperti "Setuju dan tautkan". Hal ini karena pengguna harus memahami data yang harus mereka bagikan kepada Google untuk menautkan akun mereka.
Kemampuan untuk membatalkan. Berikan cara bagi pengguna untuk kembali atau membatalkan, jika mereka memilih untuk tidak menautkan.
Hapus proses login. Pastikan pengguna memiliki metode yang jelas untuk login ke akun Google mereka, seperti kolom untuk nama pengguna dan sandi, atau Login dengan Google.
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.
Kemampuan untuk mengubah akun pengguna. Sarankan metode kepada pengguna untuk beralih akun mereka. Hal ini sangat berguna jika pengguna cenderung memiliki beberapa akun.
- Jika pengguna harus menutup layar izin untuk beralih akun, kirim error yang dapat dipulihkan ke Google sehingga pengguna dapat login ke akun yang diinginkan dengan penautan OAuth.
Sertakan logo. Tampilkan logo perusahaan Anda di layar izin. Gunakan panduan gaya untuk menempatkan logo Anda. Jika Anda juga ingin menampilkan logo Google, lihat Logo dan merek dagang.

Alur kode otorisasi
Implementasi server OAuth 2.0 untuk alur kode otorisasi terdiri dari dua endpoint, yang disediakan oleh layanan Anda oleh HTTPS. Endpoint pertama adalah endpoint otorisasi, yang bertanggung jawab untuk menemukan atau mendapatkan izin dari pengguna untuk akses data. Endpoint otorisasi menampilkan UI login kepada pengguna yang belum login dan mencatat izin untuk akses yang diminta. Endpoint kedua adalah endpoint pertukaran token, yang digunakan untuk mendapatkan string terenkripsi, yang disebut token, yang mengizinkan pengguna untuk mengakses layanan Anda.
Jika aplikasi Google perlu memanggil salah satu API layanan Anda, Google akan menggunakan endpoint ini secara bersamaan untuk mendapatkan izin dari pengguna Anda untuk memanggil API ini atas nama mereka.
Sesi alur kode otorisasi OAuth 2.0 yang dimulai oleh Google memiliki alur berikut:
- Google membuka endpoint otorisasi Anda di browser pengguna. Jika alur dimulai pada perangkat khusus suara untuk suatu Tindakan, Google akan mentransfer eksekusi ke ponsel.
- Pengguna login, jika belum login, dan memberikan izin kepada Google untuk mengakses data mereka dengan API Anda, jika mereka belum memberikan izin.
- Layanan Anda akan membuat kode otorisasi dan menampilkannya ke Google. Untuk melakukannya, alihkan kembali browser pengguna ke Google dengan kode otorisasi yang disertakan pada permintaan.
- Google mengirimkan kode otorisasi ke endpoint pertukaran token Anda, yang memverifikasi keaslian kode dan menampilkan token akses dan token refresh. Token akses adalah token berumur pendek yang diterima layanan Anda sebagai kredensial untuk mengakses API. Token refresh adalah token berumur panjang yang dapat disimpan dan digunakan oleh Google untuk memperoleh token akses baru ketika masa berlakunya habis.
- Setelah pengguna menyelesaikan alur penautan akun, setiap permintaan berikutnya yang dikirim dari Google berisi token akses.
Menangani permintaan otorisasi
Saat Anda perlu melakukan penautan akun menggunakan alur kode otorisasi OAuth 2.0, Google akan mengarahkan pengguna ke endpoint otorisasi Anda dengan permintaan yang menyertakan parameter berikut:
Parameter endpoint otorisasi | |
---|---|
client_id |
Client ID yang Anda tetapkan untuk Google. |
redirect_uri |
URL yang akan dikirimi respons. |
state |
Nilai pembukuan yang diteruskan kembali ke Google tidak berubah dalam URI pengalihan. |
scope |
Opsional: Kumpulan string cakupan yang dipisahkan spasi yang menentukan data yang diminta otorisasi oleh Google. |
response_type |
Jenis nilai yang akan ditampilkan dalam respons. Untuk alur kode otorisasi OAuth 2.0, jenis responsnya selalu code .
|
user_locale |
Setelan bahasa Akun Google dalam format RFC5646, yang digunakan untuk melokalkan konten dalam bahasa pilihan pengguna. |
Misalnya, jika endpoint otorisasi Anda tersedia di https://myservice.example.com/auth
, permintaan mungkin terlihat seperti berikut:
GET https://myservice.example.com/auth?client_id=GOOGLE_CLIENT_ID&redirect_uri=REDIRECT_URI&state=STATE_STRING&scope=REQUESTED_SCOPES&response_type=code&user_locale=LOCALE
Agar endpoint otorisasi Anda menangani permintaan login, lakukan langkah-langkah berikut:
- Verifikasi bahwa
client_id
cocok dengan Client ID yang Anda tetapkan ke Google, dan bahwaredirect_uri
cocok dengan URL alihan yang disediakan oleh Google untuk layanan Anda. Pemeriksaan ini penting untuk mencegah pemberian akses ke aplikasi klien yang tidak diinginkan atau salah dikonfigurasi. Jika Anda mendukung beberapa alur OAuth 2.0, pastikan juga bahwaresponse_type
adalahcode
. - Periksa apakah pengguna login ke layanan Anda. Jika pengguna tidak login, selesaikan alur login atau pendaftaran layanan Anda.
- Buat kode otorisasi untuk digunakan Google dalam mengakses API Anda. Kode otorisasi dapat berupa nilai string apa pun, tetapi harus mewakili pengguna secara unik, klien yang ditujukan untuk token, dan masa berlaku kode, serta tidak dapat ditebak. Biasanya, Anda akan mengeluarkan kode otorisasi yang masa berlakunya berakhir setelah sekitar 10 menit.
- Konfirmasikan bahwa URL yang ditentukan oleh parameter
redirect_uri
memiliki format berikut:https://oauth-redirect.googleusercontent.com/r/YOUR_PROJECT_ID https://oauth-redirect-sandbox.googleusercontent.com/r/YOUR_PROJECT_ID
- Alihkan browser pengguna ke URL yang ditentukan oleh
parameter
redirect_uri
. Sertakan kode otorisasi yang baru saja Anda buat dan nilai status asli yang tidak diubah saat Anda mengalihkan dengan menambahkan parametercode
danstate
. Berikut adalah contoh URL yang dihasilkan:https://oauth-redirect.googleusercontent.com/r/YOUR_PROJECT_ID?code=AUTHORIZATION_CODE&state=STATE_STRING
Menangani permintaan pertukaran token
Endpoint pertukaran token layanan Anda bertanggung jawab atas dua jenis pertukaran token:
- Tukar kode otorisasi untuk token akses dan token refresh
- Token refresh Exchange untuk token akses
Permintaan pertukaran token mencakup parameter berikut:
Parameter endpoint pertukaran token | |
---|---|
client_id |
String yang mengidentifikasi asal permintaan sebagai Google. String ini harus terdaftar dalam sistem Anda sebagai ID unik Google. |
client_secret |
String rahasia yang Anda daftarkan ke Google untuk layanan Anda. |
grant_type |
Jenis token yang dipertukarkan. Pilihannya adalah
authorization_code atau refresh_token . |
code |
Jika grant_type=authorization_code , parameter ini adalah kode yang diterima Google dari endpoint pertukaran token atau login. |
redirect_uri |
Jika grant_type=authorization_code , parameter ini adalah URL yang digunakan dalam permintaan otorisasi awal. |
refresh_token |
Jika grant_type=refresh_token , parameter ini adalah token refresh yang diterima Google dari endpoint pertukaran token Anda. |
Tukar kode otorisasi untuk token akses dan token refresh
Setelah pengguna login dan endpoint otorisasi Anda menampilkan kode otorisasi yang berumur pendek ke Google, Google akan mengirimkan permintaan ke endpoint pertukaran token Anda guna menukar kode otorisasi dengan token akses dan token refresh.
Untuk permintaan ini, nilai grant_type
adalah authorization_code
, dan nilai code
adalah nilai kode otorisasi yang sebelumnya Anda berikan ke Google. Berikut adalah contoh permintaan untuk menukar kode otorisasi dengan token akses dan token refresh:
POST /token HTTP/1.1 Host: oauth2.example.com Content-Type: application/x-www-form-urlencoded client_id=GOOGLE_CLIENT_ID&client_secret=GOOGLE_CLIENT_SECRET&grant_type=authorization_code&code=AUTHORIZATION_CODE&redirect_uri=REDIRECT_URI
Untuk menukar kode otorisasi dengan token akses dan token refresh, endpoint pertukaran token Anda akan merespons permintaan POST
dengan menjalankan langkah-langkah berikut:
- Pastikan
client_id
mengidentifikasi asal permintaan sebagai asal yang diotorisasi, dan bahwaclient_secret
cocok dengan nilai yang diharapkan. - Pastikan kode otorisasi valid dan masa berlakunya belum habis, serta client ID yang ditentukan dalam permintaan cocok dengan client ID yang terkait dengan kode otorisasi.
- Pastikan URL yang ditentukan oleh parameter
redirect_uri
sama dengan nilai yang digunakan dalam permintaan otorisasi awal. - Jika Anda tidak dapat memverifikasi semua kriteria di atas, tampilkan error Permintaan HTTP 400
yang buruk dengan
{"error": "invalid_grant"}
sebagai isi pesan. - Jika tidak, gunakan ID pengguna dari kode otorisasi untuk membuat token refresh dan token akses. Token ini dapat berupa nilai string apa pun, tetapi harus secara unik mewakili pengguna dan klien yang dituju token tersebut, dan tidak boleh ditebak. Untuk token akses, catat juga waktu habis masa berlaku token, yang biasanya satu jam setelah Anda menerbitkan token. Token refresh tidak akan habis masa berlakunya.
- Tampilkan objek JSON berikut dalam isi respons HTTPS:
{ "token_type": "Bearer", "access_token": "ACCESS_TOKEN", "refresh_token": "REFRESH_TOKEN", "expires_in": SECONDS_TO_EXPIRATION }
Google menyimpan token akses dan token refresh untuk pengguna serta mencatat masa berlaku token akses berakhir. Setelah masa berlaku token akses berakhir, Google akan menggunakan token refresh untuk mendapatkan token akses baru dari endpoint pertukaran token Anda.
Token refresh Exchange untuk token akses
Setelah masa berlaku token akses berakhir, Google akan mengirimkan permintaan ke endpoint pertukaran token untuk menukarkan token refresh dengan token akses baru.
Untuk permintaan ini, nilai grant_type
adalah refresh_token
, dan nilai
refresh_token
adalah nilai token refresh yang sebelumnya Anda berikan ke
Google. Berikut adalah contoh permintaan untuk menukar token refresh
dengan token akses:
POST /token HTTP/1.1 Host: oauth2.example.com Content-Type: application/x-www-form-urlencoded client_id=GOOGLE_CLIENT_ID&client_secret=GOOGLE_CLIENT_SECRET&grant_type=refresh_token&refresh_token=REFRESH_TOKEN
Untuk menukar token refresh dengan token akses, endpoint pertukaran token Anda akan merespons permintaan POST
dengan menjalankan langkah-langkah berikut:
- Pastikan
client_id
mengidentifikasi asal permintaan sebagai Google, danclient_secret
cocok dengan nilai yang diharapkan. - Verifikasikan bahwa token refresh valid, dan client ID yang ditentukan dalam permintaan cocok dengan client ID yang terkait dengan token refresh.
- Jika Anda tidak dapat memverifikasi semua kriteria di atas, tampilkan error Permintaan HTTP 400
yang buruk dengan
{"error": "invalid_grant"}
sebagai isi pesan. - Jika tidak, gunakan ID pengguna dari token refresh untuk membuat token akses. Token ini dapat berupa nilai string apa pun, tetapi harus secara unik mewakili pengguna dan klien yang dituju token tersebut, dan tidak boleh ditebak. Untuk token akses, catat juga waktu habis masa berlaku token, biasanya satu jam setelah Anda menerbitkan token.
- Tampilkan objek JSON berikut dalam isi respons HTTPS:
{ "token_type": "Bearer", "access_token": "ACCESS_TOKEN", "expires_in": SECONDS_TO_EXPIRATION }
Menangani permintaan userinfo
Endpoint info pengguna adalah resource OAuth 2.0 yang dilindungi, yang menampilkan klaim tentang pengguna tertaut. Menerapkan dan menghosting endpoint userinfo bersifat opsional, kecuali untuk kasus penggunaan berikut:
- Login dengan Akun Tertaut dengan Google One Tap.
- Langganan tanpa hambatan di AndroidTV.
Setelah token akses berhasil diambil dari endpoint token, Google akan mengirimkan permintaan ke endpoint userinfo Anda untuk mengambil informasi profil dasar tentang pengguna tertaut.
header permintaan endpoint userinfo | |
---|---|
Authorization header |
Token akses jenis Bearer. |
Misalnya, jika endpoint userinfo Anda tersedia di https://myservice.example.com/userinfo
, permintaan mungkin terlihat seperti berikut:
GET /userinfo HTTP/1.1 Host: myservice.example.com Authorization: Bearer ACCESS_TOKEN
Agar endpoint userinfo Anda menangani permintaan, lakukan langkah-langkah berikut:
- Ekstrak token akses dari header Authorization dan tampilkan informasi untuk pengguna yang dikaitkan dengan token akses.
- Jika token akses tidak valid, tampilkan error HTTP 401 Authorize dengan menggunakan Header Respons
WWW-Authenticate
. Berikut adalah contoh respons error infopengguna:HTTP/1.1 401 Unauthorized WWW-Authenticate: error="invalid_token", error_description="The Access Token expired"
Jika error 401 Tidak Sah, atau respons error lainnya yang gagal ditampilkan selama proses penautan, error tersebut tidak akan dapat dipulihkan, token yang diambil akan dihapus dan pengguna harus memulai proses penautan lagi. Jika token akses valid, tampilkan dan respons HTTP 200 dengan objek JSON berikut dalam isi respons HTTPS:
{ "sub": "USER_UUID", "email": "EMAIL_ADDRESS", "given_name": "FIRST_NAME", "family_name": "LAST_NAME", "name": "FULL_NAME", "picture": "PROFILE_PICTURE", }
Jika endpoint infopengguna Anda menampilkan respons HTTP 200 berhasil, token dan klaim yang diambil akan terdaftar terhadap Akun Google pengguna.respons endpoint infopengguna 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 pengguna. picture
Opsional: Foto profil pengguna.