OAuth 2.0 untuk TV dan Aplikasi Perangkat Input Terbatas

Dokumen ini menjelaskan cara menerapkan otorisasi OAuth 2.0 untuk mengakses Google API melalui aplikasi yang berjalan di perangkat seperti TV, konsol game, dan printer. Lebih khusus lagi, alur ini dirancang untuk perangkat yang tidak memiliki akses ke browser atau memiliki kemampuan input terbatas.

OAuth 2.0 memungkinkan pengguna berbagi data tertentu dengan aplikasi, sekaligus tetap menjaga kerahasiaan nama pengguna, sandi, dan informasi mereka lainnya. Misalnya, aplikasi TV dapat menggunakan OAuth 2.0 untuk mendapatkan izin guna memilih file yang disimpan di Google Drive.

Karena aplikasi yang menggunakan alur ini didistribusikan ke setiap perangkat, aplikasi tersebut diasumsikan tidak dapat menyimpan rahasia. Aplikasi dapat mengakses Google API saat pengguna berada di aplikasi atau saat aplikasi berjalan di latar belakang.

Alternatif

Jika Anda menulis aplikasi untuk platform seperti Android, iOS, macOS, Linux, atau Windows (termasuk Universal Windows Platform), yang memiliki akses ke browser dan kemampuan input penuh, gunakan alur OAuth 2.0 untuk aplikasi seluler dan desktop. (Anda harus menggunakan alur tersebut meskipun aplikasi Anda adalah alat command line tanpa antarmuka grafis.)

Jika Anda hanya ingin memproses login pengguna dengan Akun Google mereka dan menggunakan token ID JWT untuk mendapatkan informasi profil pengguna dasar, lihat Login di TV dan Perangkat Input Terbatas.

Prasyarat

Mengaktifkan API untuk project Anda

Setiap aplikasi yang memanggil Google API harus mengaktifkan API tersebut di .

Untuk mengaktifkan API untuk project Anda:

  1. di .
  2. mencantumkan semua API yang tersedia, yang dikelompokkan berdasarkan kelompok produk dan popularitas. Jika API yang ingin Anda aktifkan tidak terlihat dalam daftar, gunakan penelusuran untuk menemukannya, atau klik Lihat Semua di kelompok produk tempat API tersebut berada.
  3. Pilih API yang ingin Anda aktifkan, lalu klik tombol Aktifkan.

Membuat kredensial otorisasi

Setiap aplikasi yang menggunakan OAuth 2.0 untuk mengakses Google API harus memiliki kredensial otorisasi yang mengidentifikasi aplikasi ke server OAuth 2.0 Google. Langkah-langkah berikut menjelaskan cara membuat kredensial untuk project Anda. Kemudian, aplikasi Anda dapat menggunakan kredensial untuk mengakses API yang telah Anda aktifkan untuk project tersebut.

  1. Klik Create credentials > OAuth client ID.
  2. Pilih jenis aplikasi TV dan Perangkat Input Terbatas.
  3. Beri nama klien OAuth 2.0 Anda, lalu klik Buat.

Mengidentifikasi cakupan akses

Cakupan memungkinkan aplikasi Anda hanya meminta akses ke resource yang diperlukan sekaligus memungkinkan pengguna mengontrol jumlah akses yang mereka berikan ke aplikasi Anda. Dengan demikian, mungkin ada hubungan terbalik antara jumlah cakupan yang diminta dan kemungkinan mendapatkan izin pengguna.

Sebelum mulai menerapkan otorisasi OAuth 2.0, sebaiknya identifikasi cakupan yang memerlukan izin akses aplikasi Anda.

Lihat daftar Cakupan yang diizinkan untuk aplikasi atau perangkat yang diinstal.

Mendapatkan token akses OAuth 2.0

Meskipun aplikasi Anda berjalan di perangkat dengan kemampuan input terbatas, pengguna harus memiliki akses terpisah ke perangkat dengan kemampuan input yang lebih kaya untuk menyelesaikan alur otorisasi ini. Alur ini memiliki langkah-langkah berikut:

  1. Aplikasi Anda mengirim permintaan ke server otorisasi Google yang mengidentifikasi cakupan yang akan diminta izin aksesnya oleh aplikasi Anda.
  2. Server merespons dengan beberapa informasi yang digunakan pada langkah berikutnya, seperti kode perangkat dan kode pengguna.
  3. Anda menampilkan informasi yang dapat dimasukkan pengguna di perangkat terpisah untuk memberikan otorisasi pada aplikasi Anda.
  4. Aplikasi Anda mulai melakukan polling ke server otorisasi Google untuk menentukan apakah pengguna telah memberikan otorisasi ke aplikasi Anda.
  5. Pengguna beralih ke perangkat dengan kemampuan input yang lebih kaya, meluncurkan browser web, membuka URL yang ditampilkan di langkah 3, dan memasukkan kode yang juga ditampilkan di langkah 3. Pengguna kemudian dapat memberikan (atau menolak) akses ke aplikasi Anda.
  6. Respons berikutnya untuk permintaan polling Anda berisi token yang diperlukan aplikasi Anda untuk memberikan otorisasi permintaan atas nama pengguna. (Jika pengguna menolak akses ke aplikasi Anda, respons tidak akan berisi token.)

Gambar di bawah menggambarkan proses ini:

Pengguna login di perangkat terpisah yang memiliki browser

Bagian berikut menjelaskan langkah-langkah ini secara mendetail. Mengingat berbagai kemampuan dan lingkungan runtime yang mungkin dimiliki perangkat, contoh yang ditampilkan dalam dokumen ini menggunakan utilitas command line curl. Contoh ini harus mudah di-porting ke berbagai bahasa dan runtime.

Langkah 1: Minta kode perangkat dan pengguna

Pada langkah ini, perangkat Anda mengirimkan permintaan POST HTTP ke server otorisasi Google, di https://oauth2.googleapis.com/device/code, yang mengidentifikasi aplikasi Anda serta cakupan akses yang ingin diakses aplikasi Anda atas nama pengguna. Anda harus mengambil URL ini dari Dokumen penemuan menggunakan nilai metadata device_authorization_endpoint. Sertakan parameter permintaan HTTP berikut:

Parameter
client_id Wajib

Client ID untuk aplikasi Anda. Anda dapat menemukan nilai ini di .

scope Wajib

Daftar cakupan yang dipisahkan spasi yang mengidentifikasi resource yang dapat diakses aplikasi Anda atas nama pengguna. Nilai ini menginformasikan layar izin yang ditampilkan Google kepada pengguna. Lihat daftar Cakupan yang diizinkan untuk aplikasi atau perangkat yang diinstal.

Cakupan memungkinkan aplikasi Anda hanya meminta akses ke resource yang diperlukan sekaligus memungkinkan pengguna mengontrol jumlah akses yang mereka berikan ke aplikasi Anda. Dengan demikian, ada hubungan terbalik antara jumlah cakupan yang diminta dan kemungkinan mendapatkan izin pengguna.

Contoh

Cuplikan berikut menunjukkan contoh permintaan:

POST /device/code HTTP/1.1
Host: oauth2.googleapis.com
Content-Type: application/x-www-form-urlencoded

client_id=client_id&scope=email%20profile

Contoh ini menunjukkan perintah curl untuk mengirim permintaan yang sama:

curl -d "client_id=client_id&scope=email%20profile" \
     https://oauth2.googleapis.com/device/code

Langkah 2: Tangani respons server otorisasi

Server otorisasi akan menampilkan salah satu respons berikut:

Respons berhasil

Jika permintaan valid, respons Anda akan berupa objek JSON yang berisi properti berikut:

Properti
device_code Nilai yang ditetapkan Google secara unik untuk mengidentifikasi perangkat yang menjalankan aplikasi yang meminta otorisasi. Pengguna akan memberikan otorisasi ke perangkat tersebut dari perangkat lain dengan kemampuan input yang lebih kaya. Misalnya, pengguna mungkin menggunakan laptop atau ponsel untuk memberikan otorisasi pada aplikasi yang berjalan di TV. Dalam hal ini, device_code mengidentifikasi TV.

Kode ini memungkinkan perangkat yang menjalankan aplikasi menentukan dengan aman apakah pengguna telah memberikan atau menolak akses.

expires_in Durasi, dalam detik, saat device_code dan user_code valid. Jika, dalam waktu tersebut, pengguna tidak menyelesaikan alur otorisasi dan perangkat Anda juga tidak melakukan polling untuk mengambil informasi tentang keputusan pengguna, Anda mungkin perlu memulai ulang proses ini dari langkah 1.
interval Durasi waktu, dalam detik, yang harus ditunggu perangkat Anda di antara permintaan polling. Misalnya, jika nilainya adalah 5, perangkat Anda harus mengirim permintaan polling ke server otorisasi Google setiap lima detik. Lihat langkah 3 untuk mengetahui detail selengkapnya.
user_code Nilai peka huruf besar/kecil yang mengidentifikasi cakupan yang aksesnya diminta oleh aplikasi kepada Google. Antarmuka pengguna Anda akan meminta pengguna untuk memasukkan nilai ini di perangkat terpisah dengan kemampuan input yang lebih kaya. Google kemudian menggunakan nilai tersebut untuk menampilkan kumpulan cakupan yang benar saat meminta pengguna untuk memberikan akses ke aplikasi Anda.
verification_url URL yang harus dibuka pengguna, di perangkat terpisah, untuk memasukkan user_code dan memberikan atau menolak akses ke aplikasi Anda. Antarmuka pengguna Anda juga akan menampilkan nilai ini.

Cuplikan berikut menunjukkan contoh respons:

{
  "device_code": "4/4-GMMhmHCXhWEzkobqIHGG_EnNYYsAkukHspeYUk9E8",
  "user_code": "GQVQ-JKEC",
  "verification_url": "https://www.google.com/device",
  "expires_in": 1800,
  "interval": 5
}

Respons kuota terlampaui

Jika permintaan kode perangkat Anda telah melebihi kuota yang terkait dengan client ID, Anda akan menerima respons 403, yang berisi error berikut:

{
  "error_code": "rate_limit_exceeded"
}

Dalam hal ini, gunakan strategi backoff untuk mengurangi frekuensi permintaan.

Langkah 3: Menampilkan kode pengguna

Tampilkan verification_url dan user_code yang diperoleh di langkah 2 kepada pengguna. Kedua nilai tersebut dapat berisi karakter yang dapat dicetak dari kumpulan karakter US-ASCII. Konten yang Anda tampilkan kepada pengguna harus menginstruksikan pengguna untuk membuka verification_url di perangkat terpisah dan memasukkan user_code.

Desain antarmuka pengguna (UI) Anda dengan mempertimbangkan aturan berikut:

  • user_code
    • user_code harus ditampilkan di kolom yang dapat menangani 15 karakter ukuran 'W'. Dengan kata lain, jika Anda dapat menampilkan kode WWWWWWWWWWWWWWW dengan benar, UI Anda valid, dan sebaiknya gunakan nilai string tersebut saat menguji cara user_code ditampilkan di UI Anda.
    • user_code peka huruf besar/kecil dan tidak boleh diubah dengan cara apa pun, seperti mengubah huruf besar/kecil atau menyisipkan karakter pemformatan lainnya.
  • verification_url
    • Ruang tempat Anda menampilkan verification_url harus cukup lebar untuk menangani string URL yang panjangnya 40 karakter.
    • Anda tidak boleh mengubah verification_url dengan cara apa pun, kecuali untuk menghapus skema secara opsional untuk ditampilkan. Jika Anda berencana untuk menghapus skema (misalnya https://) dari URL karena alasan tampilan, pastikan aplikasi Anda dapat menangani varian http dan https.

Langkah 4: Mengambil sampel server otorisasi Google

Karena pengguna akan menggunakan perangkat terpisah untuk membuka verification_url dan memberikan (atau menolak) akses, perangkat yang meminta tidak otomatis diberi tahu saat pengguna merespons permintaan akses. Oleh karena itu, perangkat yang meminta perlu melakukan polling pada server otorisasi Google untuk menentukan kapan pengguna telah merespons permintaan.

Perangkat yang meminta harus terus mengirim permintaan polling hingga menerima respons yang menunjukkan bahwa pengguna telah merespons permintaan akses atau hingga device_code dan user_code yang diperoleh di langkah 2 berakhir masa berlakunya. interval yang ditampilkan di langkah 2 menentukan jumlah waktu, dalam detik, untuk menunggu di antara permintaan.

URL endpoint yang akan di-polling adalah https://oauth2.googleapis.com/token. Permintaan polling berisi parameter berikut:

Parameter
client_id Client ID untuk aplikasi Anda. Anda dapat menemukan nilai ini di .
client_secret Rahasia klien untuk client_id yang diberikan. Anda dapat menemukan nilai ini di .
device_code device_code yang ditampilkan oleh server otorisasi di langkah 2.
grant_type Tetapkan nilai ini ke urn:ietf:params:oauth:grant-type:device_code.

Contoh

Cuplikan berikut menunjukkan contoh permintaan:

POST /token HTTP/1.1
Host: oauth2.googleapis.com
Content-Type: application/x-www-form-urlencoded

client_id=client_id&
client_secret=client_secret&
device_code=device_code&
grant_type=urn%3Aietf%3Aparams%3Aoauth%3Agrant-type%3Adevice_code

Contoh ini menunjukkan perintah curl untuk mengirim permintaan yang sama:

curl -d "client_id=client_id&client_secret=client_secret& \
         device_code=device_code& \
         grant_type=urn%3Aietf%3Aparams%3Aoauth%3Agrant-type%3Adevice_code" \
         -H "Content-Type: application/x-www-form-urlencoded" \
         https://oauth2.googleapis.com/token

Langkah 5: Pengguna merespons permintaan akses

Gambar berikut menampilkan halaman yang mirip dengan yang dilihat pengguna saat mereka membuka verification_url yang Anda tampilkan di langkah 3:

Menghubungkan perangkat dengan memasukkan kode

Setelah memasukkan user_code dan, jika belum login, login ke Google, pengguna akan melihat layar izin seperti yang ditampilkan di bawah:

Contoh layar izin untuk klien perangkat

Langkah 6: Menangani respons terhadap permintaan polling

Server otorisasi Google merespons setiap permintaan polling dengan salah satu respons berikut:

Akses diberikan

Jika pengguna memberikan akses ke perangkat (dengan mengklik Allow di layar izin), respons akan berisi token akses dan token refresh. Token memungkinkan perangkat Anda mengakses Google API atas nama pengguna. (Properti scope dalam respons menentukan API mana yang dapat diakses perangkat.)

Dalam hal ini, respons API berisi kolom berikut:

Kolom
access_token Token yang dikirimkan aplikasi Anda untuk memberikan otorisasi pada permintaan Google API.
expires_in Masa berlaku token akses yang tersisa dalam hitungan detik.
refresh_token Token yang dapat Anda gunakan untuk mendapatkan token akses baru. Token refresh berlaku hingga pengguna mencabut akses. Perhatikan bahwa token refresh selalu ditampilkan untuk perangkat.
scope Cakupan akses yang diberikan oleh access_token yang dinyatakan sebagai daftar string yang peka huruf besar/kecil dan dipisahkan spasi.
token_type Jenis token yang ditampilkan. Saat ini, nilai kolom ini selalu ditetapkan ke Bearer.

Cuplikan berikut menunjukkan contoh respons:

{
  "access_token": "1/fFAGRNJru1FTz70BzhT3Zg",
  "expires_in": 3920,
  "scope": "openid https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/userinfo.email",
  "token_type": "Bearer",
  "refresh_token": "1/xEoDL4iW3cxlI7yDbSRFYNG01kVKM2C-259HOF2aQbI"
}

Token akses memiliki masa berlaku terbatas. Jika aplikasi Anda memerlukan akses ke API dalam jangka waktu yang lama, aplikasi tersebut dapat menggunakan token refresh untuk mendapatkan token akses baru. Jika aplikasi Anda memerlukan jenis akses ini, aplikasi harus menyimpan token refresh untuk digunakan nanti.

Akses ditolak

Jika pengguna menolak untuk memberikan akses ke perangkat, respons server akan memiliki kode status respons HTTP 403 (Forbidden). Respons berisi error berikut:

{
  "error": "access_denied",
  "error_description": "Forbidden"
}

Otorisasi tertunda

Jika pengguna belum menyelesaikan alur otorisasi, server akan menampilkan kode status respons HTTP 428 (Precondition Required). Respons berisi error berikut:

{
  "error": "authorization_pending",
  "error_description": "Precondition Required"
}

Melakukan polling terlalu sering

Jika perangkat terlalu sering mengirim permintaan polling, server akan menampilkan kode status respons HTTP 403 (Forbidden). Respons berisi error berikut:

{
  "error": "slow_down",
  "error_description": "Forbidden"
}

Error lainnya

Server otorisasi juga menampilkan error jika permintaan polling tidak memiliki parameter yang diperlukan atau memiliki nilai parameter yang salah. Permintaan ini biasanya memiliki kode status respons HTTP 400 (Bad Request) atau 401 (Unauthorized). Error tersebut mencakup:

Error Kode Status HTTP Deskripsi
admin_policy_enforced 400 Akun Google tidak dapat memberikan otorisasi untuk satu atau beberapa cakupan yang diminta karena kebijakan administrator Google Workspace-nya. Lihat artikel bantuan Admin Google Workspace Mengontrol aplikasi pihak ketiga & internal yang mengakses data Google Workspace untuk mengetahui informasi selengkapnya tentang cara admin dapat membatasi akses ke cakupan hingga akses diberikan secara eksplisit ke client ID OAuth Anda.
invalid_client 401

Klien OAuth tidak ditemukan. Misalnya, error ini terjadi jika nilai parameter client_id tidak valid.

Jenis klien OAuth salah. Pastikan jenis aplikasi untuk client ID ditetapkan ke TV dan Perangkat Input Terbatas.

invalid_grant 400 Nilai parameter code tidak valid, telah diklaim, atau tidak dapat diuraikan.
unsupported_grant_type 400 Nilai parameter grant_type tidak valid.
org_internal 403 Client ID OAuth dalam permintaan adalah bagian dari project yang membatasi akses ke Akun Google di Organisasi Google Cloud tertentu. Konfirmasi konfigurasi jenis pengguna untuk aplikasi OAuth Anda.

Memanggil Google API

Setelah aplikasi Anda mendapatkan token akses, Anda dapat menggunakan token tersebut untuk melakukan panggilan ke Google API atas nama akun pengguna tertentu jika cakupan akses yang diperlukan oleh API telah diberikan. Untuk melakukannya, sertakan token akses dalam permintaan ke API dengan menyertakan parameter kueri access_token atau nilai Bearer header HTTP Authorization. Jika memungkinkan, header HTTP lebih disarankan karena string kueri cenderung terlihat di log server. Pada umumnya, Anda dapat menggunakan library klien untuk menyiapkan panggilan ke Google API (misalnya, saat memanggil Drive Files API).

Anda dapat mencoba semua Google API dan melihat cakupannya di OAuth 2.0 Playground.

Contoh HTTP GET

Panggilan ke endpoint drive.files (Drive Files API) menggunakan header HTTP Authorization: Bearer mungkin terlihat seperti berikut. Perhatikan bahwa Anda perlu menentukan token akses Anda sendiri:

GET /drive/v2/files HTTP/1.1
Host: www.googleapis.com
Authorization: Bearer access_token

Berikut adalah panggilan ke API yang sama untuk pengguna yang diautentikasi menggunakan parameter string kueri access_token:

GET https://www.googleapis.com/drive/v2/files?access_token=access_token

Contoh curl

Anda dapat menguji perintah ini dengan aplikasi command line curl. Berikut adalah contoh yang menggunakan opsi header HTTP (lebih disukai):

curl -H "Authorization: Bearer access_token" https://www.googleapis.com/drive/v2/files

Atau, opsi parameter string kueri:

curl https://www.googleapis.com/drive/v2/files?access_token=access_token

Memperbarui token akses

Masa berlaku token akses secara berkala habis dan menjadi kredensial yang tidak valid untuk permintaan API terkait. Anda dapat memuat ulang token akses tanpa meminta izin pengguna (termasuk saat pengguna tidak ada) jika Anda meminta akses offline ke cakupan yang terkait dengan token.

Untuk memperbarui token akses, aplikasi Anda akan mengirimkan permintaan POST HTTPS ke server otorisasi Google (https://oauth2.googleapis.com/token) yang menyertakan parameter berikut:

Kolom
client_id Client-ID yang diperoleh dari .
client_secret Rahasia klien yang diperoleh dari .
grant_type Seperti yang ditentukan dalam spesifikasi OAuth 2.0, nilai kolom ini harus ditetapkan ke refresh_token.
refresh_token Token refresh yang ditampilkan dari pertukaran kode otorisasi.

Cuplikan berikut menunjukkan contoh permintaan:

POST /token HTTP/1.1
Host: oauth2.googleapis.com
Content-Type: application/x-www-form-urlencoded

client_id=your_client_id&
client_secret=your_client_secret&
refresh_token=refresh_token&
grant_type=refresh_token

Selama pengguna belum mencabut akses yang diberikan ke aplikasi, server token akan menampilkan objek JSON yang berisi token akses baru. Cuplikan berikut menunjukkan contoh respons:

{
  "access_token": "1/fFAGRNJru1FTz70BzhT3Zg",
  "expires_in": 3920,
  "scope": "https://www.googleapis.com/auth/drive.metadata.readonly https://www.googleapis.com/auth/calendar.readonly",
  "token_type": "Bearer"
}

Perhatikan bahwa ada batasan jumlah token refresh yang akan diterbitkan; satu batasan per kombinasi klien/pengguna, dan satu lagi per pengguna di semua klien. Anda harus menyimpan token refresh dalam penyimpanan jangka panjang dan terus menggunakannya selama token tersebut tetap valid. Jika aplikasi Anda meminta terlalu banyak token refresh, aplikasi tersebut mungkin akan mengalami batas ini, dalam hal ini token refresh lama akan berhenti berfungsi.

Mencabut token

Dalam beberapa kasus, pengguna mungkin ingin mencabut akses yang diberikan ke aplikasi. Pengguna dapat mencabut akses dengan membuka Setelan Akun. Lihat Bagian Hapus akses situs atau aplikasi di dokumen dukungan Situs & aplikasi pihak ketiga yang dapat mengakses akun Anda untuk mengetahui informasi selengkapnya.

Aplikasi juga dapat mencabut akses yang diberikan secara terprogram. Pencabutan terprogram penting dalam kasus saat pengguna berhenti berlangganan, menghapus aplikasi, atau resource API yang diperlukan oleh aplikasi telah berubah secara signifikan. Dengan kata lain, bagian dari proses penghapusan dapat mencakup permintaan API untuk memastikan izin yang sebelumnya diberikan ke aplikasi dihapus.

Untuk mencabut token secara terprogram, aplikasi Anda membuat permintaan ke https://oauth2.googleapis.com/revoke dan menyertakan token sebagai parameter:

curl -d -X -POST --header "Content-type:application/x-www-form-urlencoded" \
        https://oauth2.googleapis.com/revoke?token={token}

Token dapat berupa token akses atau token refresh. Jika token adalah token akses dan memiliki token refresh yang sesuai, token refresh juga akan dicabut.

Jika pencabutan berhasil diproses, kode status HTTP responsnya adalah 200. Untuk kondisi error, kode status HTTP 400 ditampilkan bersama dengan kode error.

Cakupan yang diizinkan

Alur OAuth 2.0 untuk perangkat hanya didukung untuk cakupan berikut:

OpenID Connect, Login dengan Google

  • email
  • openid
  • profile

Drive API

  • https://www.googleapis.com/auth/drive.appdata
  • https://www.googleapis.com/auth/drive.file

YouTube API

  • https://www.googleapis.com/auth/youtube
  • https://www.googleapis.com/auth/youtube.readonly

Menerapkan Perlindungan Lintas Akun

Langkah tambahan yang harus Anda lakukan untuk melindungi akun pengguna adalah menerapkan Perlindungan lintas akun dengan memanfaatkan Layanan Perlindungan Lintas Akun Google. Layanan ini memungkinkan Anda berlangganan notifikasi peristiwa keamanan yang memberikan informasi kepada aplikasi tentang perubahan besar pada akun pengguna. Anda kemudian dapat menggunakan informasi tersebut untuk mengambil tindakan, bergantung pada cara Anda memutuskan untuk merespons peristiwa.

Beberapa contoh jenis peristiwa yang dikirim ke aplikasi Anda oleh Layanan Perlindungan Lintas Akun Google adalah:

  • https://schemas.openid.net/secevent/risc/event-type/sessions-revoked
  • https://schemas.openid.net/secevent/oauth/event-type/token-revoked
  • https://schemas.openid.net/secevent/risc/event-type/account-disabled

Lihat halaman Melindungi akun pengguna dengan Perlindungan Lintas Akun untuk mengetahui informasi selengkapnya tentang cara menerapkan Perlindungan Lintas Akun dan untuk mengetahui daftar lengkap peristiwa yang tersedia.