Setiap integrasi Cloud-to-cloud harus menyertakan mekanisme untuk mengautentikasi pengguna.
Autentikasi memungkinkan Anda menautkan Akun Google pengguna dengan akun pengguna di sistem autentikasi Anda. Hal ini memungkinkan Anda mengidentifikasi pengguna saat pemenuhan 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 integrasi Cloud-to-cloud Anda.
Penautan Akun Google dengan OAuth
In the authorization code flow, you need two endpoints:
The authorization endpoint, which presents the sign-in UI to your users that aren't already signed in. The authorization endpoint also creates a short-lived authorization code to record users' consent to the requested access.
The token exchange endpoint, which is responsible for two types of exchanges:
- Exchanges an authorization code for a long-lived refresh token and a short-lived access token. This exchange happens when the user goes through the account linking flow.
- Exchanges a long-lived refresh token for a short-lived access token. This exchange happens when Google needs a new access token because the one it had expired.
Design guidelines
This section describes the design requirements and recommendations for the user screen that you host for OAuth linking flows. After it's called by Google's app, your platform displays a sign in to Google page and account linking consent screen to the user. The user is directed back to Google's app after giving their consent to link accounts.

Requirements
- You must communicate that the user’s account will be linked to Google, not a specific Google product like Google Home or Google Assistant.
- You must have a Google authorization statement such as "By signing in, you are authorizing Google to control your devices." See the Google Device Control Authorization section of the Google Home Developer Policies.
- You must open the Web OAuth linking page and ensure users have a clear method for signing in to their Google Account, such as fields for their username and password. Don't use the Google Sign-In (GSI) method that enables users to link without being taken to the Web OAuth Linking page. It is a violation of Google policy.
- You must include at least one of the following items in the OAuth linking
page to indicate the integration to which the user is linking:
- Company logo
- Company name
- Integration name
- App icon
Recommendations
We recommend that you do the following:
Display Google's Privacy Policy. Include a link to Google’s Privacy Policy on the consent screen.
Data to be shared. Use clear and concise language to tell the user what data of theirs Google requires and why.
Clear call-to-action. State a clear call-to-action on your consent screen, such as “Agree and link.” This is because users need to understand what data they're required to share with Google to link their accounts.
Ability to cancel. Provide a way for users to go back or cancel, if they choose not to link.
Clear sign-in process. Ensure that users have a clear method for signing in to their Google Account, such as fields for their username and password or Sign in with Google.
Ability to unlink. Offer a mechanism for users to unlink, such as a URL to their account settings on your platform. Alternatively, you can include a link to Google Account where users can manage their linked account.
Ability to change user account. Suggest a method for users to switch their account(s). This is especially beneficial if users tend to have multiple accounts.
- If a user must close the consent screen to switch accounts, send a recoverable error to Google so the user can sign in to the desired account with OAuth linking.
Include your logo. Display your company logo on the consent screen. Use your style guidelines to place your logo. If you wish to also display Google's logo, see Logos and trademarks.

Alur kode otorisasi
Penerapan server OAuth 2.0 untuk alur kode otorisasi terdiri dari dua endpoint, yang disediakan oleh layanan Anda melalui 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 Anda 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.
Saat aplikasi Google perlu memanggil salah satu API layanan Anda, Google menggunakan endpoint ini bersama-sama 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 di perangkat khusus suara untuk Tindakan, Google akan mentransfer eksekusi ke ponsel.
- Pengguna login, jika belum login, dan memberikan izin kepada Google untuk mengakses datanya dengan API Anda, jika mereka belum memberikan izin.
- Layanan Anda membuat kode otorisasi dan menampilkannya ke Google. Untuk melakukannya, alihkan browser pengguna kembali ke Google dengan kode otorisasi yang dilampirkan ke 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 Google untuk mendapatkan token akses baru saat masa berlakunya berakhir.
- Setelah pengguna menyelesaikan alur penautan akun, setiap permintaan berikutnya yang dikirim dari Google akan berisi token akses.
Menangani permintaan otorisasi
Saat Anda perlu melakukan penautan akun menggunakan alur kode otorisasi OAuth 2.0, Google akan mengirim pengguna ke endpoint otorisasi Anda dengan permintaan yang mencakup parameter berikut:
Parameter endpoint otorisasi | |
---|---|
client_id |
Client ID yang Anda tetapkan ke Google. |
redirect_uri |
URL tempat Anda mengirim respons terhadap permintaan ini. |
state |
Nilai pembukuan yang dikirim kembali ke Google tanpa diubah di URI pengalihan. |
scope |
Opsional: Kumpulan string cakupan yang dipisahkan dengan spasi yang menentukan data yang diminta otorisasi Google. |
response_type |
Jenis nilai yang akan ditampilkan dalam respons. Untuk alur kode otorisasi OAuth 2.0, jenis respons selalu code .
|
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
Agar endpoint otorisasi Anda dapat menangani permintaan login, lakukan langkah-langkah berikut:
- Pastikan bahwa
client_id
cocok dengan ID Klien yang Anda tetapkan ke Google, danredirect_uri
cocok dengan URL pengalihan yang diberikan 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 agar Google dapat menggunakannya untuk mengakses API Anda. Kode otorisasi dapat berupa nilai string apa pun, tetapi harus secara unik merepresentasikan pengguna, klien yang ditujukan untuk token, dan waktu habis masa berlaku kode, serta tidak boleh dapat ditebak. Anda biasanya mengeluarkan kode otorisasi yang akan berakhir setelah sekitar 10 menit.
- Pastikan 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
- Mengarahkan browser pengguna ke URL yang ditentukan oleh parameter
redirect_uri
. Sertakan kode otorisasi yang baru saja Anda buat dan nilai status asli yang tidak dimodifikasi 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:
- Menukar kode otorisasi dengan token akses dan token refresh
- Menukar token refresh dengan token akses
Permintaan pertukaran token mencakup parameter berikut:
Parameter endpoint pertukaran token | |
---|---|
client_id |
String yang mengidentifikasi asal permintaan sebagai Google. String ini harus didaftarkan 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. Nilainya 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 Anda. |
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. |
Mengonfigurasi cara Google mengirim kredensial ke server Anda
Bergantung pada implementasinya, server otorisasi Anda diharapkan menerima kredensial klien baik di isi permintaan, atau di header permintaan.
Secara default, Google mengirimkan kredensial dalam isi permintaan. Jika server otorisasi Anda memerlukan kredensial klien agar ada di header permintaan, Anda harus mengonfigurasi integrasi Cloud-to-cloud Anda dengan tepat:
Dari daftar project, klik Buka di samping project yang ingin Anda kerjakan.
Di bagian Cloud-to-Cloud, pilih Develop.
Klik Open di samping integrasi Anda.
Scroll ke bawah ke bagian Izin (opsional), lalu centang kotak Minta Google mengirimkan ID Klien dan rahasia melalui header autentikasi dasar HTTP.
Klik Simpan untuk menyimpan perubahan.
Menukar kode otorisasi dengan token akses dan token refresh
Setelah pengguna login dan endpoint otorisasi Anda menampilkan kode otorisasi berumur singkat ke Google, Google akan mengirimkan permintaan ke endpoint pertukaran token Anda untuk menukarkan 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 kepada 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 merespons permintaan POST
dengan menjalankan langkah-langkah berikut:
- Verifikasi bahwa
client_id
mengidentifikasi asal permintaan sebagai asal yang sah, danclient_secret
cocok dengan nilai yang diharapkan. - Verifikasi bahwa kode otorisasi valid dan belum habis masa berlakunya, serta ID klien yang ditentukan dalam permintaan cocok dengan ID klien yang terkait dengan kode otorisasi.
- Pastikan URL yang ditentukan oleh parameter
redirect_uri
identik dengan nilai yang digunakan dalam permintaan otorisasi awal. - Jika Anda tidak dapat memverifikasi semua kriteria di atas, tampilkan error Permintaan Buruk HTTP 400 dengan
{"error": "invalid_grant"}
sebagai isi. - Jika tidak, gunakan ID pengguna dari kode otorisasi untuk membuat token penggantian dan token akses. Token ini dapat berupa nilai string apa pun, tetapi harus mewakili pengguna dan klien yang dituju token secara unik, dan tidak boleh dapat ditebak. Untuk token akses, catat juga waktu habis masa berlaku token, yang biasanya satu jam setelah Anda mengeluarkan token. Token refresh tidak akan habis masa berlakunya.
- Tampilkan objek JSON berikut di 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. Saat masa berlaku token akses berakhir, Google akan menggunakan token refresh untuk mendapatkan token akses baru dari endpoint pertukaran token Anda.
Menukar token refresh dengan token akses
Saat masa berlaku token akses berakhir, Google akan mengirimkan permintaan ke endpoint pertukaran token Anda 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 kepada
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 merespons permintaan POST
dengan menjalankan langkah-langkah berikut:
- Pastikan
client_id
mengidentifikasi asal permintaan sebagai Google, dan bahwaclient_secret
cocok dengan nilai yang diharapkan. - Verifikasi bahwa token refresh valid, dan ID klien yang ditentukan dalam permintaan cocok dengan ID klien yang terkait dengan token refresh.
- Jika Anda tidak dapat memverifikasi semua kriteria di atas, tampilkan error Permintaan Buruk HTTP 400 dengan
{"error": "invalid_grant"}
sebagai isi. - 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, dan tidak boleh dapat ditebak. Untuk token akses, catat juga waktu habis masa berlaku token, biasanya satu jam setelah Anda mengeluarkan token.
- Tampilkan objek JSON berikut di isi respons HTTPS:
{ "token_type": "Bearer", "access_token": "ACCESS_TOKEN", "expires_in": SECONDS_TO_EXPIRATION }
Menangani permintaan info pengguna
Endpoint userinfo adalah resource yang dilindungi OAuth 2.0 yang menampilkan klaim tentang pengguna yang ditautkan. Menerapkan dan menghosting endpoint userinfo bersifat opsional, kecuali untuk kasus penggunaan berikut:
- Login dengan Akun Tertaut dengan Google One Ketuk.
- Langganan tanpa hambatan di Android TV.
Setelah token akses berhasil diambil dari endpoint token Anda, Google akan mengirimkan permintaan ke endpoint userinfo Anda untuk mengambil informasi profil dasar tentang pengguna yang ditautkan.
header permintaan endpoint userinfo | |
---|---|
Authorization header |
Token akses jenis Bearer. |
Misalnya, jika endpoint userinfo Anda tersedia di
https://myservice.example.com/userinfo
, permintaan mungkin akan terlihat seperti berikut:
GET /userinfo HTTP/1.1 Host: myservice.example.com Authorization: Bearer ACCESS_TOKEN
Agar endpoint userinfo Anda dapat menangani permintaan, lakukan langkah-langkah berikut:
- Ekstrak token akses dari header Otorisasi dan tampilkan informasi untuk pengguna yang terkait dengan token akses.
- Jika token akses tidak valid, tampilkan error HTTP 401 Tidak Sah dengan menggunakan Header Respons
WWW-Authenticate
. Berikut adalah contoh respons error userinfo: Jika pesan error 401 Tidak Sah, atau respons error lainnya yang tidak berhasil ditampilkan selama proses penautan, error tersebut tidak akan dapat dipulihkan, token yang diambil akan dihapus dan pengguna harus memulai proses penautan lagi.HTTP/1.1 401 Unauthorized WWW-Authenticate: error="invalid_token", error_description="The Access Token expired"
Jika token akses valid, tampilkan dan respons HTTP 200 dengan objek JSON berikut dalam isi HTTPS respons:
Jika endpoint userinfo Anda menampilkan respons sukses HTTP 200, token dan klaim yang diambil akan didaftarkan terhadap Akun Google pengguna.{ "sub": "USER_UUID", "email": "EMAIL_ADDRESS", "given_name": "FIRST_NAME", "family_name": "LAST_NAME", "name": "FULL_NAME", "picture": "PROFILE_PICTURE", }
respons endpoint userinfo 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.