Mengautentikasi serta mengizinkan aplikasi Chat dan permintaan Google Chat API

Autentikasi dan otorisasi adalah mekanisme yang masing-masing digunakan untuk memverifikasi identitas dan akses ke resource. Dokumen ini menguraikan cara kerja autentikasi dan otorisasi untuk aplikasi Chat dan permintaan Chat API.

Ringkasan proses

Diagram berikut menunjukkan langkah-langkah tingkat tinggi untuk autentikasi dan otorisasi untuk Google Chat:

Langkah-langkah tingkat tinggi untuk autentikasi dan otorisasi Google Chat
Gambar 1. Langkah-langkah umum untuk autentikasi dan otorisasi Google Chat.

  1. Mengonfigurasi project Google Cloud, mengaktifkan Chat API, dan mengonfigurasi aplikasi Chat: Selama pengembangan, Anda membuat project Google Cloud. Dalam project Google Cloud, Anda dapat mengaktifkan Chat API, mengonfigurasi aplikasi Chat, dan menyiapkan autentikasi. Untuk mengetahui informasi selengkapnya, lihat Mengembangkan di Google Workspace dan Membangun aplikasi Chat.

  2. Call Chat API: Saat memanggil Chat API, aplikasi akan mengirimkan kredensial autentikasi ke Chat API. Jika aplikasi Anda melakukan autentikasi dengan akun layanan, kredensial tersebut akan dikirim sebagai bagian dari kode aplikasi Anda. Jika aplikasi Anda memerlukan pemanggilan Chat API menggunakan autentikasi pengguna yang belum diberikan, aplikasi akan meminta pengguna untuk login.

  3. Meminta resource: Aplikasi Anda meminta akses dengan cakupan yang Anda tentukan saat menyiapkan autentikasi.

  4. Minta izin: Jika aplikasi Anda mengautentikasi sebagai pengguna, Google akan menampilkan layar izin OAuth agar pengguna dapat memutuskan apakah akan memberi aplikasi Anda akses ke data yang diminta atau tidak. Autentikasi dengan akun layanan tidak memerlukan izin pengguna.

  5. Kirim permintaan resource yang disetujui: Jika pengguna menyetujui cakupan otorisasi, aplikasi Anda akan memaketkan kredensial dan cakupan yang disetujui pengguna ke dalam permintaan. Permintaan tersebut dikirim ke server otorisasi Google untuk mendapatkan token akses.

  6. Google menampilkan token akses: Token akses berisi daftar cakupan yang diberikan. Jika daftar cakupan yang ditampilkan lebih ketat daripada cakupan yang diminta, aplikasi Anda akan menonaktifkan fitur apa pun yang dibatasi oleh token.

  7. Mengakses resource yang diminta: Aplikasi Anda menggunakan token akses dari Google untuk memanggil Chat API dan mengakses resource Chat API.

  8. Dapatkan token refresh (opsional): Jika aplikasi Anda harus mengakses Google Chat API setelah masa berlaku token akses tunggal berakhir, aplikasi dapat memperoleh token refresh. Untuk informasi lebih lanjut, lihat Menggunakan OAuth 2.0 untuk mengakses Google API.

  9. Minta lebih banyak resource: Jika aplikasi Anda memerlukan lebih banyak akses, aplikasi akan meminta pengguna untuk memberikan cakupan baru, yang menghasilkan permintaan baru untuk mendapatkan token akses (langkah 3-6).

Saat aplikasi Chat memerlukan autentikasi

Aplikasi chat dapat mengirim pesan sebagai respons terhadap interaksi pengguna, atau secara asinkron. Mereka juga dapat menyelesaikan tugas atas nama pengguna, seperti membuat ruang Chat atau mendapatkan daftar orang di ruang Chat.

Aplikasi chat tidak memerlukan autentikasi untuk merespons interaksi pengguna, kecuali jika aplikasi Chat memanggil Chat API atau Google API lain saat memproses respons.

Untuk mengirim pesan asinkron atau melakukan tugas atas nama pengguna, aplikasi Chat membuat permintaan RESTful ke Chat API, yang memerlukan autentikasi dan otorisasi.

Respons terhadap interaksi pengguna tidak memerlukan otentikasi

Aplikasi Google Chat tidak perlu melakukan autentikasi sebagai pengguna atau aplikasi Chat untuk menerima dan merespons peristiwa interaksi secara sinkron.

Aplikasi Google Chat menerima peristiwa interaksi setiap kali pengguna berinteraksi atau memanggil aplikasi Chat, termasuk:

  • Pengguna mengirim pesan ke aplikasi Chat.
  • Pengguna @menyebutkan aplikasi Chat.
  • Pengguna memanggil salah satu perintah garis miring aplikasi Chat.

Diagram berikut menunjukkan urutan respons permintaan antara pengguna Chat dan aplikasi Chat:

Tidak diperlukan otorisasi untuk peristiwa interaksi aplikasi Chat
Gambar 2.Peristiwa interaksi aplikasi Chat tidak memerlukan autentikasi.

  1. Pengguna mengirim pesan ke aplikasi Chat di Google Chat.
  2. Google Chat meneruskan pesan ke aplikasi.
  3. Aplikasi akan menerima pesan, memprosesnya, dan menampilkan respons ke Google Chat.
  4. Google Chat merender respons untuk pengguna, atau dalam ruang.

Urutan ini berulang untuk setiap peristiwa interaksi aplikasi Chat.

Pesan asinkron memerlukan autentikasi

Pesan asinkron terjadi saat aplikasi Chat membuat permintaan ke Chat API, yang memerlukan autentikasi dan otorisasi.

Dengan memanggil Chat API, aplikasi Chat dapat memposting pesan ke Google Chat atau menyelesaikan tugas dan mengakses data atas nama pengguna. Misalnya, setelah mendeteksi pemadaman server, aplikasi Chat dapat memanggil Chat API untuk:

  • Buat ruang Chat khusus untuk menyelidiki dan memperbaiki pemadaman.
  • Menambahkan orang ke ruang Chat.
  • Posting pesan ke ruang Chat untuk memberikan detail tentang pemadaman.

Diagram berikut menunjukkan urutan pesan asinkron antara aplikasi Chat dan ruang Chat:

Autentikasi diperlukan untuk pesan asinkron
Gambar 3. Pesan asinkron memerlukan autentikasi.

  1. Aplikasi Chat membuat pesan dengan memanggil Chat API menggunakan metode spaces.messages.create, dan menyertakan kredensial pengguna dalam permintaan HTTP.
  2. Google Chat mengautentikasi aplikasi Chat dengan akun layanan atau kredensial pengguna.
  3. Google Chat merender pesan aplikasi ke ruang Chat yang ditentukan.

Cakupan Chat API

Konfigurasikan layar izin OAuth dan pilih cakupan untuk menentukan informasi yang ditampilkan kepada pengguna dan peninjau aplikasi, serta daftarkan aplikasi agar Anda dapat memublikasikannya nanti.

Untuk menentukan tingkat akses yang diberikan ke aplikasi, Anda perlu mengidentifikasi dan mendeklarasikan cakupan otorisasi. Cakupan otorisasi adalah string URI OAuth 2.0 yang berisi nama aplikasi Google Workspace, jenis data yang diaksesnya, dan tingkat aksesnya.

Cakupan tidak sensitif

Kode cakupan Deskripsi
https://www.googleapis.com/auth/chat.bot

Cakupan chat.bot hanya mendukung akun layanan. Anda tidak dapat melakukan autentikasi dengan kredensial pengguna atau dengan delegasi tingkat domain menggunakan cakupan ini.

Mengizinkan aplikasi Chat melihat chat dan mengirim pesan. Memberikan akses ke semua fitur yang tersedia untuk aplikasi Chat.

Cakupan sensitif

Kode cakupan Deskripsi
https://www.googleapis.com/auth/chat.spaces Buat percakapan dan ruang serta lihat atau perbarui metadata (termasuk setelan histori) di Chat.
https://www.googleapis.com/auth/chat.spaces.create Membuat percakapan baru di Chat.
https://www.googleapis.com/auth/chat.spaces.readonly Melihat chat dan ruang di Chat.
https://www.googleapis.com/auth/chat.memberships Melihat, menambahkan, dan menghapus anggota dari percakapan di Chat.
https://www.googleapis.com/auth/chat.memberships.app Menambahkan dan menghapus dirinya sendiri dari percakapan di Google Chat.
https://www.googleapis.com/auth/chat.memberships.readonly Melihat anggota dalam percakapan Chat.
https://www.googleapis.com/auth/chat.messages.create Menulis dan mengirim pesan di Chat.
https://www.googleapis.com/auth/chat.messages.reactions Melihat, menambahkan, dan menghapus reaksi terhadap pesan di Chat.
https://www.googleapis.com/auth/chat.messages.reactions.create Menambahkan reaksi pada pesan di Chat.
https://www.googleapis.com/auth/chat.messages.reactions.readonly Melihat reaksi terhadap pesan dalam Chat.
https://www.googleapis.com/auth/chat.users.readstate Melihat dan mengubah waktu baca terakhir untuk percakapan Chat.
https://www.googleapis.com/auth/chat.users.readstate.readonly Melihat waktu terakhir dibaca untuk percakapan Chat.

Cakupan yang dibatasi

Kode cakupan Deskripsi
https://www.googleapis.com/auth/chat.delete Menghapus percakapan dan ruang, serta menghapus akses ke file terkait di Chat.
https://www.googleapis.com/auth/chat.import Impor ruang, pesan, dan keanggotaan ke Chat. Untuk mengetahui informasi selengkapnya, lihat Mengizinkan aplikasi Chat untuk mengimpor data
https://www.googleapis.com/auth/chat.messages Melihat, menulis, mengirim, memperbarui, dan menghapus pesan, serta menambahkan, melihat, dan menghapus reaksi terhadap pesan.
https://www.googleapis.com/auth/chat.messages.readonly Melihat pesan dan reaksi di Chat.

Cakupan dalam tabel sebelumnya menunjukkan sensitivitasnya, sesuai dengan definisi berikut:

Jika aplikasi Anda memerlukan akses ke Google API lainnya, Anda juga dapat menambahkan cakupan tersebut. Untuk informasi selengkapnya tentang cakupan Google API, lihat Menggunakan OAuth 2.0 untuk Mengakses Google API.

Guna mempelajari cakupan untuk Google Workspace API lebih lanjut, lihat Mengonfigurasi layar izin OAuth dan memilih cakupan.

Jenis autentikasi yang diperlukan

Ada dua cara bagi aplikasi Chat untuk mengautentikasi dan memberi otorisasi dengan Chat API: kredensial pengguna atau akun layanan.

Dengan otorisasi kredensial pengguna, aplikasi Chat dapat mengakses data pengguna dan menyelesaikan tindakan atas nama pengguna. Cakupan OAuth menentukan data dan tindakan yang diotorisasi. Namun, aplikasi Chat ini tidak dapat dipublikasikan secara publik. Untuk informasi selengkapnya, lihat Memublikasikan aplikasi Google Chat.

Dengan otorisasi aplikasi, aplikasi Chat mengakses API sebagai aplikasi menggunakan kredensial akun layanan. Otorisasi aplikasi selalu menggunakan cakupan otorisasi chat.bot.

Jika Anda adalah administrator domain, Anda dapat memberikan delegasi tingkat domain untuk mengizinkan akun layanan aplikasi mengakses data pengguna tanpa mengharuskan setiap pengguna memberikan izin. Setelah mengonfigurasi delegasi di seluruh domain, Anda dapat melakukan panggilan API menggunakan akun layanan untuk meniru akun pengguna. Meskipun akun layanan digunakan untuk autentikasi, delegasi seluruh domain meniru identitas pengguna sehingga dianggap sebagai autentikasi pengguna. Fungsi apa pun yang memerlukan autentikasi pengguna dapat menggunakan delegasi seluruh domain.

Saat menentukan jenis kredensial yang akan digunakan untuk permintaan API tertentu, perlu diingat bahwa beberapa metode API hanya mendukung jenis kredensial tertentu. Jika metode API mendukung kedua kredensial, jenis kredensial yang digunakan dalam panggilan akan memengaruhi hasil yang ditampilkan:

  • Dengan otorisasi aplikasi, metode hanya menampilkan resource yang dapat diakses aplikasi.
  • Dengan otorisasi pengguna, metode ini hanya menampilkan resource yang dapat diakses pengguna di UI Chat.

Misalnya, memanggil metode ListSpaces dengan otorisasi aplikasi akan menampilkan daftar ruang tempat aplikasi menjadi anggota. Memanggil ListSpaces dengan otorisasi pengguna akan menampilkan daftar ruang tempat pengguna tersebut menjadi anggota. Dalam praktiknya, aplikasi Anda mungkin menggunakan kedua jenis otorisasi saat memanggil Chat API, bergantung pada fungsi yang Anda inginkan.

Untuk panggilan Chat API asinkron

Tabel berikut mencantumkan metode Chat API dan cakupan otorisasinya yang didukung:

Metode Autentikasi pengguna didukung Autentikasi aplikasi didukung Cakupan otorisasi yang didukung
Ruang  
Membuat ruang Dengan Autentikasi pengguna:
  • chat.spaces.create
  • chat.spaces
  • chat.import
Menyiapkan ruang Dengan Autentikasi pengguna:
  • chat.spaces.create
  • chat.spaces
Dapatkan ruang Dengan Autentikasi pengguna:
  • chat.spaces.readonly
  • chat.spaces
Dengan Autentikasi aplikasi:
  • chat.bot
Menampilkan daftar ruang Dengan Autentikasi pengguna:
  • chat.spaces.readonly
  • chat.spaces
Dengan Autentikasi aplikasi:
  • chat.bot
Memperbarui ruang Dengan Autentikasi pengguna:
  • chat.spaces
  • chat.import
Menghapus ruang Dengan Autentikasi pengguna:
  • chat.delete
  • chat.import
Menyelesaikan proses impor untuk ruang Dengan Autentikasi pengguna:
  • chat.import
Menemukan pesan langsung Dengan Autentikasi pengguna:
  • chat.spaces.readonly
  • chat.spaces
Dengan Autentikasi aplikasi:
  • chat.bot
Anggota  
Membuat anggota Dengan Autentikasi pengguna:
  • chat.memberships
  • chat.memberships.app
  • chat.import
Mendapatkan pelanggan Dengan Autentikasi pengguna:
  • chat.memberships.readonly
  • chat.memberships
Dengan Autentikasi aplikasi:
  • chat.bot
Anggota daftar Dengan Autentikasi pengguna:
  • chat.memberships.readonly
  • chat.memberships
  • chat.import
Dengan Autentikasi aplikasi:
  • chat.bot
Menghapus anggota Dengan Autentikasi pengguna:
  • chat.memberships
  • chat.memberships.app
  • chat.import
Pesan  
Membuat pesan Dengan Autentikasi pengguna:
  • chat.messages.create
  • chat.messages
  • chat.import
Dengan Autentikasi aplikasi:
  • chat.bot
Terima pesan Dengan Autentikasi pengguna:
  • chat.messages.readonly
  • chat.messages
Dengan Autentikasi aplikasi:
  • chat.bot
Mencantumkan pesan Dengan Autentikasi pengguna:
  • chat.messages.readonly
  • chat.messages
  • chat.import
Memperbarui pesan Dengan Autentikasi pengguna:
  • chat.messages
  • chat.import
Dengan Autentikasi aplikasi:
  • chat.bot
Menghapus pesan Dengan Autentikasi pengguna:
  • chat.messages
  • chat.import
Dengan Autentikasi aplikasi:
  • chat.bot
Reaksi  
Membuat reaksi Dengan Autentikasi pengguna:
  • chat.messages.reactions.create
  • chat.messages.reactions
  • chat.messages
  • chat.import
Membuat daftar reaksi Dengan Autentikasi pengguna:
  • chat.messages.reactions.readonly
  • chat.messages.reactions
  • chat.messages.readonly
  • chat.messages
Menghapus reaksi Dengan Autentikasi pengguna:
  • chat.messages.reactions
  • chat.messages
  • chat.import
Media & lampiran  
Mengupload media sebagai lampiran file Dengan Autentikasi pengguna:
  • chat.messages.create
  • chat.messages
  • chat.import
Mendownload media Dengan Autentikasi pengguna:
  • chat.messages.readonly
  • chat.messages
Dengan Autentikasi aplikasi:
  • chat.bot
Mendapatkan lampiran pesan Dengan Autentikasi aplikasi:
  • chat.bot
Status baca pengguna
Mendapatkan status baca ruang pengguna Dengan Autentikasi pengguna:
  • chat.users.readstate
  • chat.users.readstate.readonly
Memperbarui status baca ruang pengguna Dengan Autentikasi pengguna:
  • chat.users.readstate
Mendapatkan status pembacaan thread pengguna Dengan Autentikasi pengguna:
  • chat.users.readstate
  • chat.users.readstate.readonly

Untuk peristiwa interaksi aplikasi Chat

Tabel berikut mencantumkan cara umum pengguna berinteraksi dengan aplikasi Chat dan apakah autentikasi diperlukan atau didukung:

Skenario Tidak diperlukan autentikasi Autentikasi pengguna didukung Autentikasi aplikasi didukung
Terima pesan dari:
Peristiwa interaksi aplikasi Chat
Callback Apps Script
Google Cloud Pub/Sub
Membalas pesan:
Secara sinkron, menggunakan peristiwa interaksi aplikasi Chat
Secara bersamaan, menggunakan nilai yang ditampilkan callback Apps Script
Mengirim pesan baru:
Dengan Webhook masuk