Penautan Akun Google dengan OAuth

Akun ditautkan menggunakan standar industri OAuth 2.0 implisit dan aliran kode otorisasi . Layanan Anda harus mendukung otorisasi yang sesuai dengan OAuth 2.0 dan titik akhir pertukaran token .

Dalam alur implisit , Google membuka titik akhir otorisasi Anda di browser pengguna. Setelah berhasil masuk, Anda mengembalikan token akses berumur panjang ke Google. Token akses ini sekarang disertakan dalam setiap permintaan yang dikirim dari Google.

Dalam alur kode otorisasi , Anda memerlukan dua titik akhir:

  • Titik akhir otorisasi , yang menampilkan UI masuk kepada pengguna Anda yang belum masuk. Titik akhir otorisasi juga membuat kode otorisasi berumur pendek untuk mencatat persetujuan pengguna atas akses yang diminta.

  • Titik akhir pertukaran token , yang bertanggung jawab atas dua jenis pertukaran:

    1. Menukar kode otorisasi untuk token penyegaran berumur panjang dan token akses berumur pendek. Pertukaran ini terjadi saat pengguna melewati alur penautan akun.
    2. Menukar token penyegaran berumur panjang dengan token akses berumur pendek. Pertukaran ini terjadi ketika Google membutuhkan token akses baru karena sudah kedaluwarsa.

Pilih aliran OAuth 2.0

Meskipun aliran implisit lebih sederhana untuk diterapkan, Google merekomendasikan agar token akses yang dikeluarkan oleh aliran implisit tidak pernah kedaluwarsa. Ini karena pengguna dipaksa untuk menautkan akunnya lagi setelah token kedaluwarsa dengan aliran implisit. Jika Anda memerlukan token kedaluwarsa karena alasan keamanan, kami sangat menyarankan agar Anda menggunakan alur kode otorisasi sebagai gantinya.

Pedoman desain

Bagian ini menjelaskan persyaratan desain dan rekomendasi untuk layar pengguna yang Anda hosting untuk alur penautan OAuth. Setelah dipanggil oleh aplikasi Google, platform Anda menampilkan halaman masuk ke Google dan layar persetujuan penautan akun kepada pengguna. Pengguna diarahkan kembali ke aplikasi Google setelah memberikan persetujuan mereka untuk menautkan akun.

Gambar ini menunjukkan langkah-langkah bagi pengguna untuk menautkan akun Google mereka ke sistem otentikasi Anda. Tangkapan layar pertama menunjukkan penautan yang dimulai pengguna dari platform Anda. Gambar kedua menunjukkan pengguna masuk ke Google, sedangkan gambar ketiga menunjukkan persetujuan dan konfirmasi pengguna untuk menautkan akun Google mereka dengan aplikasi Anda. Tangkapan layar terakhir menunjukkan akun pengguna yang berhasil ditautkan di aplikasi Google.
Gambar 1. Pengguna yang menautkan akun masuk ke Google dan layar persetujuan.

Persyaratan

  1. Anda harus menyampaikan bahwa akun pengguna akan ditautkan ke Google, bukan produk Google tertentu seperti Google Home atau Asisten Google.

Rekomendasi

Kami menyarankan Anda melakukan hal berikut:

  1. Tampilkan Kebijakan Privasi Google. Sertakan tautan ke Kebijakan Privasi Google di layar persetujuan.

  2. Data untuk dibagikan. Gunakan bahasa yang jelas dan ringkas untuk memberi tahu pengguna data apa yang dibutuhkan Google mereka dan mengapa.

  3. Ajakan bertindak yang jelas. Nyatakan ajakan bertindak yang jelas di layar persetujuan Anda, seperti "Setuju dan tautkan". Ini karena pengguna perlu memahami data apa yang mereka butuhkan untuk dibagikan dengan Google untuk menautkan akun mereka.

  4. Kemampuan untuk membatalkan. Sediakan cara bagi pengguna untuk kembali atau membatalkan, jika mereka memilih untuk tidak menautkan.

  5. Hapus proses masuk. Pastikan pengguna memiliki metode yang jelas untuk masuk ke akun Google mereka, seperti bidang untuk nama pengguna dan sandi atau Masuk dengan Google .

  6. Kemampuan untuk membatalkan tautan. Tawarkan mekanisme bagi pengguna untuk membatalkan tautan, seperti URL ke pengaturan akun mereka di platform Anda. Atau, Anda dapat menyertakan tautan ke Akun Google tempat pengguna dapat mengelola akun tertaut mereka.

  7. Kemampuan untuk mengubah akun pengguna. Sarankan metode bagi pengguna untuk mengalihkan akun mereka. Ini sangat bermanfaat jika pengguna cenderung memiliki banyak akun.

    • Jika pengguna harus menutup layar persetujuan untuk beralih akun, kirimkan kesalahan yang dapat dipulihkan ke Google sehingga pengguna dapat masuk ke akun yang diinginkan dengan penautan OAuth dan alur implisit .
  8. Sertakan logo Anda. Tampilkan logo perusahaan Anda di layar persetujuan. Gunakan pedoman gaya Anda untuk menempatkan logo Anda. Jika Anda juga ingin menampilkan logo Google, lihat Logo dan merek dagang .

建立专案

要创建您的项目以使用帐户链接:

  1. Go to the Google API Console.
  2. Klik Buat proyek .
  3. Masukkan nama atau terima saran yang dihasilkan.
  4. Konfirmasikan atau edit bidang yang tersisa.
  5. Klik Buat .

Untuk melihat ID proyek Anda:

  1. Go to the Google API Console.
  2. Temukan proyek Anda di tabel di halaman arahan. ID proyek muncul di kolom ID .

Google帐户链接过程包括一个同意屏幕,该屏幕告诉用户请求访问其数据的应用程序,他们要求的数据类型以及适用的条款。在生成Google API客户端ID之前,您需要先配置OAuth同意屏幕。

  1. 打开Goog​​le API控制台的OAuth同意屏幕页面。
  2. 如果出现提示,请选择刚刚创建的项目。
  3. 在“ OAuth同意屏幕”页面上,填写表格,然后单击“保存”按钮。

    申请名称:要求同意的申请名称。该名称应准确反映您的应用程序,并与用户在其他地方看到的应用程序名称一致。应用程序名称将显示在“帐户链接同意”屏幕上。

    应用程序徽标:同意屏幕上的图像,可帮助用户识别您的应用程序。徽标显示在“帐户链接同意”屏幕和帐户设置上

    支持电子邮件:供用户与您联系以获取有关其同意的问题。

    Google API范围范围允许您的应用访问用户的私人Google数据。对于Google帐户关联用例,默认范围(电子邮件,个人资料,openid)就足够了,您无需添加任何敏感范围。通常,最佳做法是在需要访问时而不是预先请求增量地作用域。 了解更多

    授权域:为了保护您和您的用户,Google仅允许使用OAuth进行身份验证的应用程序使用授权域。您的应用程序的链接必须托管在授权域中。 了解更多

    应用程序主页链接:您的应用程序的主页。必须托管在授权域上。

    应用程序隐私权政策链接:显示在Google Acount Linking同意屏幕上。必须托管在授权域上。

    应用程序服务条款链接(可选):必须托管在授权域中。

    图1 。虚拟应用程序Google Tuning的Google帐户链接同意屏幕

  4. 选中“验证状态”,如果您的应用程序需要验证,则单击“提交验证”按钮以提交您的应用程序以进行验证。有关详细信息,请参阅OAuth验证要求

Terapkan server OAuth Anda

Sebuah OAuth pelaksanaan 2.0 server dari aliran kode otorisasi terdiri dari dua endpoint, yang layanan Anda membuat tersedia dengan HTTPS. Titik akhir pertama adalah titik akhir otorisasi, yang bertanggung jawab untuk menemukan atau memperoleh persetujuan dari pengguna untuk akses data. Titik akhir otorisasi menyajikan UI masuk ke pengguna Anda yang belum masuk dan mencatat persetujuan untuk akses yang diminta. Titik akhir kedua adalah titik akhir pertukaran token, yang digunakan untuk mendapatkan string terenkripsi, yang disebut token, yang memberi wewenang kepada pengguna untuk mengakses layanan Anda.

Saat aplikasi Google perlu memanggil salah satu API layanan Anda, Google menggunakan titik akhir 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:

  1. Google membuka titik akhir otorisasi Anda di browser pengguna. Jika alur dimulai pada perangkat khusus suara untuk Tindakan, Google mentransfer eksekusi ke telepon.
  2. Pengguna masuk, jika belum masuk, dan memberikan izin kepada Google untuk mengakses data mereka dengan API Anda, jika mereka belum memberikan izin.
  3. Layanan Anda menciptakan kode otorisasi dan kembali ke Google. Untuk melakukannya, arahkan kembali browser pengguna ke Google dengan kode otorisasi yang dilampirkan pada permintaan.
  4. Google mengirimkan kode otorisasi untuk endpoint pertukaran token Anda, yang memverifikasi keaslian kode dan mengembalikan sebuah token dan refresh token akses. Token akses adalah token berumur pendek yang diterima layanan Anda sebagai kredensial untuk mengakses API. Token penyegaran adalah token berumur panjang yang dapat disimpan dan digunakan oleh Google untuk memperoleh token akses baru saat token tersebut kedaluwarsa.
  5. 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 mengirimkan pengguna ke titik akhir otorisasi Anda dengan permintaan yang menyertakan parameter berikut:

Parameter titik akhir otorisasi
client_id ID Klien yang Anda tetapkan ke Google.
redirect_uri URL tujuan Anda mengirim tanggapan atas permintaan ini.
state Nilai pembukuan yang diteruskan kembali ke Google tidak berubah di URI pengalihan.
scope Opsional: Sebuah set ruang-delimited string lingkup yang menentukan data Google meminta otorisasi untuk.
response_type Jenis nilai yang akan dikembalikan dalam respons. Untuk aliran kode 2.0 otorisasi OAuth, jenis respon selalu code .
user_locale Akun Google pengaturan bahasa di RFC5646 format yang, digunakan untuk melokalisasi konten Anda dalam bahasa pilihan pengguna.

Misalnya, jika endpoint otorisasi Anda tersedia di https://myservice.example.com/auth , permintaan akan terlihat seperti berikut ini:

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 titik akhir otorisasi Anda menangani permintaan masuk, lakukan langkah-langkah berikut:

  1. Verifikasi bahwa client_id sesuai dengan ID Klien Anda ditugaskan untuk Google, dan bahwa redirect_uri cocok URL redirect 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 OAuth 2.0 arus, juga mengkonfirmasi bahwa response_type adalah code .
  2. Periksa apakah pengguna masuk ke layanan Anda. Jika pengguna tidak masuk, selesaikan alur masuk atau pendaftaran layanan Anda.
  3. Buat kode otorisasi untuk digunakan Google untuk mengakses API Anda. Kode otorisasi dapat berupa nilai string apa pun, tetapi harus secara unik mewakili pengguna, klien yang menjadi tujuan token, dan waktu kedaluwarsa kode, dan kode tersebut tidak boleh ditebak. Anda biasanya mengeluarkan kode otorisasi yang kedaluwarsa setelah sekitar 10 menit.
  4. Konfirmasi bahwa URL yang ditentukan oleh redirect_uri parameter memiliki bentuk sebagai berikut:
      https://oauth-redirect.googleusercontent.com/r/YOUR_PROJECT_ID
      https://oauth-redirect-sandbox.googleusercontent.com/r/YOUR_PROJECT_ID
      
  5. Mengarahkan browser pengguna ke URL yang ditentukan oleh redirect_uri parameter. Sertakan kode otorisasi Anda hanya dihasilkan dan yang asli, dimodifikasi nilai negara ketika Anda mengarahkan dengan menambahkan code dan state parameter. Berikut ini adalah contoh dari URL yang dihasilkan:
    https://oauth-redirect.googleusercontent.com/r/YOUR_PROJECT_ID?code=AUTHORIZATION_CODE&state=STATE_STRING

Menangani permintaan pertukaran token

Titik akhir pertukaran token layanan Anda bertanggung jawab atas dua jenis pertukaran token:

  • Tukarkan kode otorisasi untuk token akses dan token penyegaran
  • Tukarkan token penyegaran untuk token akses

Permintaan pertukaran token mencakup parameter berikut:

Parameter titik akhir pertukaran token
client_id String yang mengidentifikasi asal permintaan sebagai Google. String ini harus terdaftar dalam sistem Anda sebagai pengenal unik Google.
client_secret String rahasia yang Anda daftarkan ke Google untuk layanan Anda.
grant_type Jenis token yang dipertukarkan. Ini baik authorization_code atau refresh_token .
code Ketika grant_type=authorization_code , parameter ini adalah kode Google yang diterima dari baik masuk atau pertukaran endpoint tanda.
redirect_uri Ketika grant_type=authorization_code , parameter ini adalah URL yang digunakan dalam permintaan otorisasi awal.
refresh_token Ketika grant_type=refresh_token , parameter ini adalah refresh tanda Google yang diterima dari endpoint pertukaran token Anda.
Tukarkan kode otorisasi untuk token akses dan token penyegaran

Setelah pengguna masuk dan titik akhir otorisasi Anda mengembalikan kode otorisasi yang berumur pendek ke Google, Google mengirimkan permintaan ke titik akhir pertukaran token Anda untuk menukar kode otorisasi dengan token akses dan token penyegaran.

Untuk permintaan ini, nilai grant_type adalah authorization_code , dan nilai code adalah nilai kode otorisasi sebelumnya Anda diberikan kepada Google. Berikut ini adalah contoh permintaan pertukaran kode otorisasi untuk token akses dan token penyegaran:

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 bertukar kode otorisasi untuk akses token dan refresh token, token Anda pertukaran endpoint merespon untuk POST permintaan dengan menjalankan langkah-langkah berikut:

  1. Verifikasi bahwa client_id mengidentifikasi permintaan asal sebagai asal berwenang, dan bahwa client_secret sesuai dengan nilai yang diharapkan.
  2. Verifikasi bahwa kode otorisasi valid dan tidak kedaluwarsa, dan bahwa ID klien yang ditentukan dalam permintaan cocok dengan ID klien yang terkait dengan kode otorisasi.
  3. Konfirmasi bahwa URL yang ditentukan oleh redirect_uri parameter identik dengan nilai yang digunakan dalam permintaan otorisasi awal.
  4. Jika Anda tidak dapat memverifikasi semua kriteria di atas, kembali HTTP 400 Bad Request kesalahan dengan {"error": "invalid_grant"} sebagai tubuh.
  5. Jika tidak, gunakan ID pengguna dari kode otorisasi untuk menghasilkan token penyegaran dan token akses. Token ini dapat berupa nilai string apa pun, tetapi harus secara unik mewakili pengguna dan klien yang menjadi tujuan token tersebut, dan tidak boleh dapat ditebak. Untuk token akses, catat juga waktu kedaluwarsa token, yang biasanya satu jam setelah Anda mengeluarkan token. Segarkan token tidak kedaluwarsa.
  6. Kembalikan JSON objek berikut dalam tubuh respon HTTPS:
    {
    "token_type": "Bearer",
    "access_token": "ACCESS_TOKEN",
    "refresh_token": "REFRESH_TOKEN",
    "expires_in": SECONDS_TO_EXPIRATION
    }
    

Google menyimpan token akses dan token penyegaran untuk pengguna dan mencatat masa berlaku token akses. Saat token akses kedaluwarsa, Google menggunakan token penyegaran untuk mendapatkan token akses baru dari titik akhir pertukaran token Anda.

Tukarkan token penyegaran untuk token akses

Saat token akses kedaluwarsa, Google mengirimkan permintaan ke titik akhir pertukaran token Anda untuk menukar token penyegaran dengan token akses baru.

Untuk permintaan ini, nilai grant_type adalah refresh_token , dan nilai refresh_token adalah nilai refresh tanda sebelumnya diberikan kepada Google. Berikut ini adalah contoh permintaan untuk menukar token penyegaran 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 bertukar refresh tanda untuk token akses, token Anda pertukaran endpoint merespon untuk POST permintaan dengan menjalankan langkah-langkah berikut:

  1. Verifikasi bahwa client_id mengidentifikasi permintaan asal Google, dan bahwa client_secret sesuai dengan nilai yang diharapkan.
  2. Pastikan token penyegaran valid, dan ID klien yang ditentukan dalam permintaan cocok dengan ID klien yang terkait dengan token penyegaran.
  3. Jika Anda tidak dapat memverifikasi semua kriteria di atas, kembali HTTP 400 Bad Request kesalahan dengan {"error": "invalid_grant"} sebagai tubuh.
  4. Jika tidak, gunakan ID pengguna dari token penyegaran untuk menghasilkan token akses. Token ini dapat berupa nilai string apa pun, tetapi harus secara unik mewakili pengguna dan klien yang menjadi tujuan token tersebut, dan tidak boleh dapat ditebak. Untuk token akses, catat juga waktu kedaluwarsa token, biasanya satu jam setelah Anda mengeluarkan token.
  5. Kembalikan objek JSON berikut di badan respons HTTPS:
    {
    "token_type": "Bearer",
    "access_token": " ACCESS_TOKEN ",
    "expires_in": SECONDS_TO_EXPIRATION
    }
Menangani permintaan info pengguna

The userinfo endpoint adalah sumber daya yang dilindungi OAuth 2.0 bahwa klaim pengembalian tentang pengguna terkait. Menerapkan dan menghosting endpoint userinfo adalah opsional, kecuali untuk kasus penggunaan berikut:

Setelah token akses berhasil diambil dari titik akhir token Anda, Google mengirimkan permintaan ke titik akhir info pengguna Anda untuk mengambil informasi profil dasar tentang pengguna yang ditautkan.

header permintaan endpoint userinfo
Authorization header Token akses tipe Bearer.

Misalnya, jika endpoint userinfo Anda tersedia di https://myservice.example.com/userinfo , permintaan akan terlihat seperti berikut ini:

GET /userinfo HTTP/1.1
Host: myservice.example.com
Authorization: Bearer ACCESS_TOKEN

Agar endpoint userinfo Anda menangani permintaan, lakukan langkah-langkah berikut:

  1. Ekstrak token akses dari header Otorisasi dan kembalikan informasi untuk pengguna yang terkait dengan token akses.
  2. Jika token akses tidak valid, mengembalikan HTTP 401 Unauthorized error dengan menggunakan WWW-Authenticate Respon header. Di bawah ini adalah contoh dari respon kesalahan userinfo:
    HTTP/1.1 401 Unauthorized
    WWW-Authenticate: error="invalid_token",
    error_description="The Access Token expired"
    
    Jika 401 tidak sah, atau respon kesalahan yang gagal lainnya dikembalikan selama proses menghubungkan, kesalahan akan non-dipulihkan, token yang diambil akan dibuang dan pengguna akan memiliki untuk memulai proses penautan lagi.
  3. Jika token akses valid, kembali dan HTTP 200 respon dengan objek JSON berikut dalam tubuh respon HTTPS:

    {
    "sub": "USER_UUID",
    "email": "EMAIL_ADDRESS",
    "given_name": "FIRST_NAME",
    "family_name": "LAST_NAME",
    "name": "FULL_NAME",
    "picture": "PROFILE_PICTURE",
    }
    
    Jika Anda userinfo titik akhir pengembalian respon sukses HTTP 200, diambil token dan klaim yang terdaftar terhadap pengguna Google Akun.

    tanggapan titik akhir info pengguna
    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 dari pengguna.
    picture Opsional: Gambar riwayat pengguna.

Memvalidasi implementasi Anda

Anda dapat memvalidasi implementasi Anda dengan menggunakan OAuth 2.0 Playground alat.

Pada alat, lakukan langkah-langkah berikut:

  1. Klik Konfigurasi untuk membuka jendela Configuration OAuth 2.0.
  2. Di bidang aliran OAuth, pilih Client-side.
  3. Di bidang OAuth endpoint, pilih Custom.
  4. Tentukan titik akhir OAuth 2.0 dan ID klien yang Anda tetapkan ke Google di bidang yang sesuai.
  5. Pada bagian Langkah 1, tidak memilih lingkup Google. Sebagai gantinya, biarkan bidang ini kosong atau ketik cakupan yang valid untuk server Anda (atau string arbitrer jika Anda tidak menggunakan cakupan OAuth). Setelah selesai, klik Otorisasi API.
  6. Dalam Langkah 2 dan Langkah 3 bagian, melalui aliran OAuth 2.0 dan memverifikasi bahwa setiap langkah bekerja sebagaimana dimaksud.

Anda dapat memvalidasi implementasi Anda dengan menggunakan Akun Google Menghubungkan Demo alat.

Pada alat, lakukan langkah-langkah berikut:

  1. Klik Sign-in dengan tombol Google.
  2. Pilih akun yang ingin Anda tautkan.
  3. Masukkan ID layanan.
  4. Secara opsional, masukkan satu atau beberapa cakupan yang akan Anda minta aksesnya.
  5. Klik Mulai Demo.
  6. Saat diminta, konfirmasikan bahwa Anda dapat menyetujui dan menolak permintaan penautan.
  7. Konfirmasikan bahwa Anda dialihkan ke platform Anda.