Penautan akun dengan OAuth

Jenis penautan OAuth mendukung dua alur OAuth 2.0 standar industri, yaitu alur kode implisit dan otorisasi.

Dalam alur kode implisit, Google membuka endpoint otorisasi Anda di browser pengguna. Setelah berhasil login, Anda akan menampilkan token akses berumur panjang ke Google. Token akses ini sekarang disertakan di setiap permintaan yang dikirim dari Asisten ke Action.

Dalam alur kode otorisasi, Anda membutuhkan dua endpoint:

  • Endpoint otorisasi, yang bertanggung jawab untuk menampilkan UI login kepada pengguna yang belum login, dan merekam izin untuk akses yang diminta dalam bentuk kode otorisasi yang memiliki masa aktif singkat.
  • Endpoint pertukaran token, yang bertanggung jawab atas dua jenis pertukaran:
    1. 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.
    2. 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 masa berlakunya telah berakhir.

Meskipun alur kode implisit lebih mudah diimplementasikan, Google merekomendasikan agar token akses yang dikeluarkan menggunakan alur implisit tidak pernah kedaluwarsa, karena menggunakan masa berlaku token dengan alur implisit akan memaksa pengguna untuk menautkan akunnya lagi. Jika Anda memerlukan masa berlaku token untuk alasan keamanan, Anda harus mempertimbangkan penggunaan alur kode autentikasi.

Menerapkan penautan akun OAuth

Mengonfigurasi project

Untuk mengonfigurasi project Anda agar menggunakan penautan OAuth, ikuti langkah-langkah berikut:

  1. Buka Konsol Actions dan pilih project yang ingin Anda gunakan.
  2. Klik tab Develop dan pilih Account linking.
  3. Aktifkan tombol di samping Penautan akun.
  4. Di bagian Pembuatan akun, pilih Tidak, saya hanya ingin mengizinkan pembuatan akun di situs saya.

  5. Di Jenis penautan, pilih OAuth dan Implisit.

  6. Di Informasi Klien:

    • Tetapkan nilai ke Client ID yang dikeluarkan oleh Actions Anda ke Google untuk mengidentifikasi permintaan yang berasal dari Google.
    • Masukkan URL untuk endpoint Otorisasi dan Pertukaran Token.
  1. Klik Simpan.

Menerapkan server OAuth

为了支持 OAuth 2.0 隐式流程,您的服务会进行授权 端点。此端点负责 就数据访问征得用户同意。授权端点 向尚未登录的用户显示登录界面,并记录 同意所请求的访问。

当您的 Action 需要调用您的某项授权的 API 时,Google 会使用 此端点来获得用户许可,以在其上调用这些 API 。

由 Google 发起的典型 OAuth 2.0 隐式流会话具有以下特征: 以下流程:

  1. Google 会在用户的浏览器中打开您的授权端点。通过 如果用户尚未登录,则可以登录,并且授予 Google 访问 通过您的 API 访问其数据(如果尚未授予权限)。
  2. 您的服务会创建一个访问令牌并将其返回给 通过使用访问令牌将用户的浏览器重定向回 Google, 附件。
  3. Google 调用您的服务的 API,并使用 。您的服务会验证访问令牌是否向 Google 授予 访问 API 的授权,然后完成 API 调用。

处理授权请求

当您的 Action 需要通过 OAuth 2.0 隐式流程执行账号关联时, Google 会通过包含以下内容的请求将用户发送到您的授权端点: 以下参数:

授权端点参数
client_id 您分配给 Google 的客户 ID。
redirect_uri 此请求的响应发送到的网址。
state 将一个在 重定向 URI。
response_type 要在响应中返回的值的类型。对于 OAuth 2.0 隐式 则响应类型始终为 token

例如,如果您的授权端点可通过 https://myservice.example.com/auth 访问, 请求可能如下所示:

GET https://myservice.example.com/auth?client_id=GOOGLE_CLIENT_ID&redirect_uri=REDIRECT_URI&state=STATE_STRING&response_type=token

为了让授权端点能够处理登录请求,请执行以下步骤:

  1. 验证 client_idredirect_uri 值, 防止向意外或配置错误的客户端应用授予访问权限:

    • 确认 client_id 是否与您的客户端 ID 匹配 分配给 Google。
    • 确认 redirect_uri 指定的网址 参数的格式如下:
      https://oauth-redirect.googleusercontent.com/r/YOUR_PROJECT_ID
      YOUR_PROJECT_ID项目设置页面上的 ID Actions 控制台界面。
  2. 检查用户是否已登录您的服务。如果用户未登录 中,完成服务的登录或注册流程。

  3. 生成 Google 将用于访问您的 API 的访问令牌。通过 访问令牌可以是任何字符串值,但必须唯一地表示 令牌对应的用户和客户端,且不得被猜到。

  4. 发送 HTTP 响应,将用户浏览器重定向到相应网址 由 redirect_uri 参数指定。添加所有 以下参数:

    • access_token:您刚刚生成的访问令牌
    • token_type:字符串 bearer
    • state:原始状态的未修改状态值 请求 以下是生成的网址示例:
      https://oauth-redirect.googleusercontent.com/r/YOUR_PROJECT_ID#access_token=ACCESS_TOKEN&token_type=bearer&state=STATE_STRING

Google 的 OAuth 2.0 重定向处理程序将收到访问令牌并确认 state 值没有更改。在 Google 获得 访问令牌,则 Google 会将该令牌附加到后续调用 作为 AppRequest 的一部分添加到您的 Action。

Mendesain antarmuka pengguna suara untuk alur autentikasi

Periksa apakah pengguna telah diverifikasi dan mulai alur penautan akun

  1. Buka project Action Builder Anda di Konsol Actions.
  2. Buat scene baru untuk memulai penautan akun di Action Anda:
    1. Klik Scene.
    2. Klik ikon add (+) untuk menambahkan adegan baru.
  3. Pada scene yang baru dibuat, klik ikon tambahkan untuk Kondisi.
  4. Tambahkan kondisi yang memeriksa apakah pengguna yang terkait dengan percakapan adalah pengguna terverifikasi. Jika pemeriksaan gagal, Action Anda tidak dapat melakukan penautan akun selama percakapan, dan harus kembali menyediakan akses ke fungsi yang tidak memerlukan penautan akun.
    1. Di kolom Enter new expression pada bagian Kondisi, masukkan logika berikut: user.verificationStatus != "VERIFIED"
    2. Di bagian Transition, pilih scene yang tidak memerlukan penautan akun atau scene yang merupakan titik entri ke fungsi khusus tamu.

  1. Klik ikon tambahkan untuk Kondisi.
  2. Tambahkan kondisi untuk memicu alur penautan akun jika pengguna tidak memiliki identitas terkait.
    1. Di kolom Enter new expression pada bagian Kondisi, masukkan logika berikut: user.verificationStatus == "VERIFIED"
    2. Di bagian Transisi, pilih scene sistem Penautan Akun.
    3. Klik Simpan.

Setelah disimpan, scene sistem penautan akun baru yang disebut <SceneName>_AccountLinking akan ditambahkan ke project Anda.

Menyesuaikan adegan penautan akun

  1. Di bagian Scene, pilih scene sistem penautan akun.
  2. Klik Kirim perintah dan tambahkan kalimat singkat untuk menjelaskan kepada pengguna alasan Action perlu mengakses identitas mereka (misalnya, "Untuk menyimpan preferensi Anda").
  3. Klik Simpan.

  1. Di bagian Kondisi, klik Jika pengguna berhasil menyelesaikan penautan akun.
  2. Konfigurasi cara alur berjalan jika pengguna setuju untuk menautkan akun mereka. Misalnya, panggil webhook untuk memproses logika bisnis kustom yang diperlukan dan lakukan transisi kembali ke scene asal.
  3. Klik Simpan.

  1. Di bagian Kondisi, klik Jika pengguna membatalkan atau menolak penautan akun.
  2. Konfigurasikan cara alur akan dilanjutkan jika pengguna tidak setuju untuk menautkan akunnya. Misalnya, kirim pesan konfirmasi dan alihkan ke scene yang menyediakan fungsi yang tidak memerlukan penautan akun.
  3. Klik Simpan.

  1. Di bagian Kondisi, klik Jika terjadi error sistem atau jaringan.
  2. Konfigurasikan cara alur akan dilanjutkan jika alur penautan akun tidak dapat diselesaikan karena error sistem atau jaringan. Misalnya, kirim pesan konfirmasi dan alihkan ke scene yang menyediakan fungsi yang tidak memerlukan penautan akun.
  3. Klik Simpan.

Menangani permintaan akses data

Jika permintaan Asisten berisi token akses, periksa terlebih dahulu apakah token akses valid (dan belum habis masa berlakunya), lalu ambil akun pengguna terkait dari database Anda.