Akun ditautkan menggunakan alur implisit dan kode otorisasi OAuth 2.0 standar industri.
Layanan Anda harus mendukung endpoint otorisasi dan penukaran token yang sesuai dengan OAuth 2.0.在隐式流程中,Google 会在用户的浏览器中打开您的授权端点。成功登录后,您将向 Google 返回一个长期访问令牌。现在,此访问令牌会包含在 Google 发送的每个请求中。
在授权代码流程中,您需要两个端点:
授权端点,用于向尚未登录的用户显示登录界面。授权端点还会创建一个短期授权代码,以记录用户对所请求访问权限的同意情况。
令牌交换端点,负责两种类型的交换:
- 使用授权代码换取长期有效的刷新令牌和短期有效的访问令牌。当用户完成账号关联流程时,就会发生此交换。
- 将长期有效的刷新令牌换成短期有效的访问令牌。当 Google 需要新的访问令牌(因为现有访问令牌已过期)时,就会发生这种交换。
选择 OAuth 2.0 流程
虽然隐式流程更易于实现,但 Google 建议通过隐式流程签发的访问令牌永不过期。这是因为,在隐式流程中,令牌过期后,系统会强制用户重新关联其账号。如果您出于安全考虑需要令牌过期,我们强烈建议您改用授权码流程。
设计准则
本部分介绍了您为 OAuth 关联流程托管的用户屏幕的设计要求和建议。在 Google 应用调用该 API 后,您的平台会向用户显示登录 Google 页面和账号关联意见征求界面。同意关联账号后,系统会将用户重定向回 Google 的应用。
要求
- 您必须说明用户的账号将与 Google 相关联,而非 Google Home 或 Google 助理等特定 Google 产品相关联。
建议
建议您执行以下操作:
显示 Google 的隐私权政策。在同意屏幕上添加指向 Google 隐私权政策的链接。
要共享的数据。使用清晰简洁的语言告知用户 Google 需要哪些用户数据以及原因。
添加醒目的号召性用语。在用户同意页面上提供明确的号召性用语,例如“同意并关联”。这是因为用户需要了解他们需要与 Google 分享哪些数据才能关联账号。
可以取消。为用户提供返回或取消链接的途径,如果用户选择不进行关联。
明确的登录流程。确保用户有明确的 Google 账号登录方法,例如用户名和密码字段或使用 Google 账号登录。
能够解除关联。提供一种可让用户解除关联的机制,例如指向您平台上账号设置的网址。或者,您也可以添加指向 Google 账号的链接,以便用户管理其关联的账号。
能够更改用户账号。建议用户切换账号的方法。如果用户通常拥有多个账号,这种做法尤为有益。
- 如果用户必须关闭意见征求界面才能切换账号,请向 Google 发送可恢复的错误,以便用户可以使用 OAuth 关联和隐式流程登录所需的账号。
添加您的徽标。在意见征求页面上显示您的公司徽标。 按照您的样式准则放置徽标。如果您还想显示 Google 的徽标,请参阅徽标和商标。
Membuat project
Untuk membuat project Anda agar dapat menggunakan penautan akun:
- Buka Konsol Google API.
- Klik Buat proyek.
- Masukkan nama atau terima saran yang dibuat.
- Konfirmasi atau edit kolom yang tersisa.
- Klik Buat.
Untuk melihat project ID Anda:
- Buka Konsol Google API.
- Cari project Anda di tabel pada halaman landing. Project ID muncul di kolom ID.
Mengonfigurasi Layar Izin OAuth Anda
Proses Penautan Akun Google mencakup layar izin yang memberi tahu pengguna aplikasi yang meminta akses ke data mereka, jenis data yang diminta, dan persyaratan yang berlaku. Anda harus mengonfigurasi layar izin OAuth sebelum membuat ID klien Google API.
- Buka halaman Layar izin OAuth di konsol API Google.
- Jika diminta, pilih project yang baru saja Anda buat.
Di halaman "Layar izin OAuth", isi formulir, lalu 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 Anda. Untuk kasus penggunaan Penautan Akun Google, cakupan default (email, profil, openid) sudah cukup, Anda tidak perlu menambahkan cakupan sensitif. Secara umum, praktik terbaiknya adalah meminta cakupan secara bertahap, pada saat akses diperlukan, bukan di awal. Pelajari lebih lanjut.
Domain yang diizinkan: Guna melindungi Anda dan pengguna Anda, Google hanya mengizinkan aplikasi yang melakukan autentikasi menggunakan OAuth untuk menggunakan Domain yang Diizinkan. Link aplikasi Anda harus dihosting di Domain yang Diotorisasi. Pelajari lebih lanjut.
Link Halaman Beranda Aplikasi: Halaman beranda untuk 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, Tunery
Periksa "Status Verifikasi", jika aplikasi Anda memerlukan verifikasi, klik tombol "Kirim Untuk Verifikasi" untuk mengirimkan aplikasi Anda untuk diverifikasi. Lihat persyaratan verifikasi OAuth untuk mengetahui detailnya.
Menerapkan server OAuth Anda
n
Untuk mendukung alur implisit OAuth 2.0, layanan Anda menyediakan endpoint otorisasi melalui HTTPS. Endpoint ini bertanggung jawab untuk autentikasi dan mendapatkan izin dari pengguna untuk akses data. Endpoint otorisasi menampilkan UI login kepada pengguna yang belum login dan mencatat izin untuk akses yang diminta.
Saat aplikasi Google perlu memanggil salah satu API resmi layanan Anda, Google menggunakan endpoint ini untuk mendapatkan izin dari pengguna Anda agar dapat memanggil API ini atas nama mereka.
Sesi alur implisit OAuth 2.0 umum yang dimulai oleh Google memiliki alur berikut:
- Google membuka endpoint otorisasi Anda di browser pengguna. Pengguna login, jika belum login, dan memberikan izin kepada Google untuk mengakses datanya dengan API Anda, jika mereka belum memberikan izin.
- Layanan Anda membuat token akses dan menampilkannya ke Google. Untuk melakukannya, alihkan browser pengguna kembali ke Google dengan token akses yang dilampirkan pada permintaan.
- Google memanggil API layanan Anda dan melampirkan token akses dengan setiap permintaan. Layanan Anda memverifikasi bahwa token akses memberikan otorisasi Google untuk mengakses API, lalu menyelesaikan panggilan API.
Menangani permintaan otorisasi
Saat aplikasi Google perlu melakukan penautan akun melalui alur implisit OAuth 2.0, Google akan mengarahkan pengguna ke endpoint otorisasi Anda dengan permintaan yang mencakup parameter berikut:
| Parameter endpoint otorisasi | |
|---|---|
client_id |
ID klien yang Anda tetapkan untuk Google. |
redirect_uri |
URL tempat Anda mengirim respons terhadap permintaan ini. |
state |
Nilai pembukuan yang dikirim kembali ke Google tanpa diubah di URI pengalihan. |
response_type |
Jenis nilai yang akan ditampilkan dalam respons. Untuk alur implisit OAuth 2.0, jenis respons selalu token. |
user_locale |
Setelan bahasa Akun Google dalam format RFC5646 yang digunakan untuk melokalkan konten Anda 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&response_type=token&user_locale=LOCALE
Agar endpoint otorisasi Anda dapat menangani permintaan login, lakukan langkah-langkah berikut:
Verifikasi nilai
client_iddanredirect_uriuntuk mencegah pemberian akses ke aplikasi klien yang tidak diinginkan atau salah dikonfigurasi:- Konfirmasi bahwa
client_idcocok dengan client ID yang Anda tetapkan ke Google. - Pastikan URL yang ditentukan oleh parameter
redirect_urimemiliki format berikut:https://oauth-redirect.googleusercontent.com/r/YOUR_PROJECT_ID https://oauth-redirect-sandbox.googleusercontent.com/r/YOUR_PROJECT_ID
- Konfirmasi bahwa
Periksa apakah pengguna login ke layanan Anda. Jika pengguna tidak login, selesaikan alur login atau pendaftaran layanan Anda.
Buat token akses agar Google dapat menggunakannya untuk mengakses API Anda. Token akses dapat berupa nilai string apa pun, tetapi harus secara unik merepresentasikan pengguna dan klien yang dituju token tersebut serta tidak boleh dapat ditebak.
Kirim respons HTTP yang mengalihkan browser pengguna ke URL yang ditentukan oleh parameter
redirect_uri. Sertakan semua parameter berikut dalam fragmen URL:access_token: Token akses yang baru saja Anda buattoken_type: Stringbearerstate: Nilai status yang tidak diubah dari permintaan asli
Berikut adalah contoh URL yang dihasilkan:
https://oauth-redirect.googleusercontent.com/r/YOUR_PROJECT_ID#access_token=ACCESS_TOKEN&token_type=bearer&state=STATE_STRING
Handler pengalihan OAuth 2.0 Google menerima token akses dan mengonfirmasi
bahwa nilai state tidak berubah. Setelah Google mendapatkan token akses untuk layanan Anda, Google akan melampirkan token tersebut ke panggilan berikutnya ke API layanan Anda.
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 subID unik yang mengidentifikasi pengguna di sistem Anda. emailAlamat email pengguna. given_nameOpsional: Nama depan pengguna. family_nameOpsional: Nama belakang pengguna. nameOpsional: Nama lengkap pengguna. pictureOpsional: Foto profil pengguna.
Memvalidasi implementasi
Anda dapat memvalidasi penerapan dengan menggunakan alat OAuth 2.0 Playground.
Di alat, lakukan langkah-langkah berikut:
- Klik Konfigurasi untuk membuka jendela Konfigurasi OAuth 2.0.
- Di kolom OAuth flow, pilih Client-side.
- Di kolom OAuth Endpoints, pilih Custom.
- Tentukan endpoint OAuth 2.0 dan client ID yang Anda tetapkan ke Google di kolom yang sesuai.
- Di bagian Langkah 1, jangan pilih cakupan Google apa pun. Sebagai gantinya, biarkan kolom ini kosong atau ketik cakupan yang valid untuk server Anda (atau string arbitrer jika Anda tidak menggunakan cakupan OAuth). Setelah selesai, klik Izinkan API.
- Di bagian Langkah 2 dan Langkah 3, ikuti alur OAuth 2.0 dan verifikasi bahwa setiap langkah berfungsi sebagaimana mestinya.
Anda dapat memvalidasi penerapan dengan menggunakan alat Demo Penautan Akun Google.
Di alat, lakukan langkah-langkah berikut:
- Klik tombol Login dengan Google.
- Pilih akun yang ingin Anda tautkan.
- Masukkan ID layanan.
- Secara opsional, masukkan satu atau beberapa cakupan yang akan Anda minta aksesnya.
- Klik Mulai Demo.
- Jika diminta, konfirmasi bahwa Anda dapat menyetujui dan menolak permintaan penautan.
- Konfirmasi bahwa Anda dialihkan ke platform Anda.