Dokumen ini menjelaskan cara aplikasi yang diinstal di perangkat seperti ponsel, tablet, dan komputer menggunakan endpoint OAuth 2.0 Google untuk mengizinkan akses ke Google API.
OAuth 2.0 memungkinkan pengguna berbagi data tertentu dengan aplikasi sekaligus menjaga kerahasiaan nama pengguna, sandi, dan informasi lainnya. Misalnya, aplikasi dapat menggunakan OAuth 2.0 untuk mendapatkan izin dari pengguna untuk menyimpan file di Google Drive mereka.
Aplikasi terinstal didistribusikan ke setiap perangkat, dan diasumsikan bahwa aplikasi ini tidak dapat menyimpan rahasia. Mereka dapat mengakses Google API saat pengguna berada di aplikasi atau saat aplikasi berjalan di latar belakang.
Alur otorisasi ini mirip dengan yang digunakan untuk aplikasi server web. Perbedaan utamanya adalah aplikasi terinstal harus membuka browser sistem dan menyediakan URI pengalihan lokal untuk menangani respons dari server otorisasi Google.
Library dan contoh
Untuk aplikasi iOS, sebaiknya gunakan versi terbaru SDK Login dengan Google untuk iOS. SDK menangani otorisasi pengguna dan lebih mudah diterapkan daripada protokol tingkat rendah yang dijelaskan dalam panduan ini.
Untuk aplikasi yang berjalan di perangkat yang tidak mendukung browser sistem atau yang memiliki kemampuan input terbatas, seperti TV, konsol game, kamera, atau printer, lihat OAuth 2.0 untuk TV & Perangkat atau Login di TV dan Perangkat Input Terbatas.
Prasyarat
Mengaktifkan API untuk project Anda
Setiap aplikasi yang memanggil Google API harus mengaktifkan API tersebut di Konsol API.
Untuk mengaktifkan API untuk project Anda:
- Buka Library API di Konsol API Google.
- Jika diminta, pilih project, atau buat project baru.
- Library API menampilkan daftar 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 View All di kelompok produk yang sesuai.
- Pilih API yang ingin Anda aktifkan, lalu klik tombol Aktifkan.
- Jika diminta, aktifkan penagihan.
- Jika diminta, baca dan setujui Persyaratan Layanan API.
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 tersebut untuk mengakses API yang telah Anda aktifkan untuk project tersebut.
- Buka halaman Klien.
- Klik Buat klien.
- Bagian berikut menjelaskan jenis klien yang didukung oleh server otorisasi Google. Pilih jenis klien yang direkomendasikan untuk aplikasi Anda, beri nama klien OAuth, dan tetapkan kolom lain dalam formulir sebagaimana mestinya.
iOS
- Pilih jenis aplikasi iOS.
- Masukkan nama untuk klien OAuth. Nama ini ditampilkan di halaman Klien project Anda untuk mengidentifikasi klien.
- Masukkan ID paket untuk aplikasi Anda. ID paket adalah nilai kunci
CFBundleIdentifier
dalam file resource daftar properti informasi aplikasi Anda (info.plist). Nilai ini paling sering ditampilkan di panel General atau panel Signing & Capabilities di editor project Xcode. ID paket juga ditampilkan di bagian General Information di halaman App Information untuk aplikasi di situs App Store Connect Apple.
Konfirmasi bahwa Anda menggunakan ID paket yang benar untuk aplikasi Anda, karena Anda tidak akan dapat mengubahnya jika menggunakan fitur App Check.
- (Opsional)
Masukkan ID App Store aplikasi Anda jika aplikasi tersebut dipublikasikan di App Store Apple. ID Toko adalah string numerik yang disertakan dalam setiap URL Apple App Store.
- Buka aplikasi Apple App Store di perangkat iOS atau iPadOS Anda.
- Telusuri aplikasi Anda.
- Pilih tombol Bagikan (simbol persegi dan panah ke atas).
- Pilih Salin Link.
- Tempelkan link ke editor teks. ID App Store adalah bagian akhir URL.
Contoh:
https://apps.apple.com/app/google/id284815942
- (Opsional)
Masukkan ID Tim Anda. Lihat Menemukan ID Tim di dokumentasi Akun Developer Apple untuk mengetahui informasi selengkapnya.
Catatan: Kolom Team ID wajib diisi jika Anda mengaktifkan App Check untuk klien. - (Opsional)
Aktifkan App Check untuk aplikasi iOS Anda. Saat Anda mengaktifkan App Check, layanan App Attest Apple digunakan untuk memverifikasi bahwa permintaan OAuth 2.0 yang berasal dari klien OAuth Anda adalah asli dan berasal dari aplikasi Anda. Hal ini membantu mengurangi risiko peniruan identitas aplikasi. Pelajari lebih lanjut cara mengaktifkan App Check untuk aplikasi iOS Anda.
- Klik Buat.
Desktop
- Pilih jenis aplikasi aplikasi desktop.
- Di kolom Name, masukkan nama untuk klien OAuth. Nama ini ditampilkan di halaman Klien project Anda untuk mengidentifikasi klien.
- 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. Oleh karena itu, mungkin ada hubungan terbalik antara jumlah cakupan yang diminta dan kemungkinan memperoleh izin pengguna.
Sebelum mulai menerapkan otorisasi OAuth 2.0, sebaiknya identifikasi cakupan yang memerlukan izin akses dari aplikasi Anda.
Dokumen Cakupan OAuth 2.0 API berisi daftar lengkap cakupan yang mungkin Anda gunakan untuk mengakses Google API.
Mendapatkan token akses OAuth 2.0
Langkah-langkah berikut menunjukkan cara aplikasi Anda berinteraksi dengan server OAuth 2.0 Google untuk mendapatkan izin pengguna dalam melakukan permintaan API atas nama pengguna. Aplikasi Anda harus memiliki izin tersebut sebelum dapat menjalankan permintaan Google API yang memerlukan otorisasi pengguna.
Langkah 1: Buat verifikasi kode dan tantangan
Google mendukung protokol Proof Key for Code Exchange (PKCE) untuk membuat alur aplikasi terinstal lebih aman. Pemverifikasi kode unik dibuat untuk setiap permintaan otorisasi, dan nilai yang diubah, yang disebut "code_challenge", dikirim ke server otorisasi untuk mendapatkan kode otorisasi.
Membuat pemverifikasi kode
code_verifier adalah string acak kriptografis entropi tinggi yang menggunakan karakter
yang tidak dicadangkan [A-Z] / [a-z] / [0-9] / "-" / "." / "_" / "~", dengan panjang minimum 43 karakter
dan panjang maksimum 128 karakter.
Pemverifikasi kode harus memiliki entropi yang cukup agar nilainya tidak dapat ditebak.
Membuat tantangan kode
Dua metode pembuatan tantangan kode didukung.
| Metode Pembuatan Tantangan Kode | |
|---|---|
| S256 (direkomendasikan) | Verifikasi kode adalah hash SHA256 berenkode Base64URL (tanpa padding) dari pemverifikasi kode.
|
| plain | Verifikasi kode memiliki nilai yang sama dengan pemverifikasi kode yang dihasilkan di atas.
|
Langkah 2: Kirim permintaan ke server OAuth 2.0 Google
Untuk mendapatkan otorisasi pengguna, kirim permintaan ke server otorisasi Google di
https://accounts.google.com/o/oauth2/v2/auth. Endpoint ini menangani pencarian sesi aktif,
mengautentikasi pengguna, dan mendapatkan izin pengguna. Endpoint hanya dapat diakses melalui SSL, dan
menolak koneksi HTTP (non-SSL).
Server otorisasi mendukung parameter string kueri berikut untuk aplikasi yang diinstal:
| Parameter | |||||||
|---|---|---|---|---|---|---|---|
client_id |
Wajib
Client ID untuk aplikasi Anda. Anda dapat menemukan nilai ini di halaman Klien Konsol Cloud. |
||||||
redirect_uri |
Wajib
Menentukan cara server otorisasi Google mengirim respons ke aplikasi Anda. Ada beberapa opsi pengalihan yang tersedia untuk aplikasi terinstal, dan Anda harus menyiapkan kredensial otorisasi dengan metode pengalihan tertentu. Nilai harus sama persis dengan salah satu URI pengalihan yang diizinkan untuk klien OAuth 2.0, yang Anda konfigurasi di halaman Klien Konsol Cloud klien Anda. Jika nilai ini tidak cocok dengan URI yang diizinkan, Anda akan mendapatkan error Tabel ini menunjukkan nilai parameter
|
||||||
response_type |
Wajib
Menentukan apakah endpoint Google OAuth 2.0 menampilkan kode otorisasi. Tetapkan nilai parameter ke |
||||||
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. Cakupan memungkinkan aplikasi Anda hanya meminta akses ke resource yang diperlukan, sekaligus memungkinkan pengguna mengontrol jumlah akses yang mereka berikan ke aplikasi Anda. Oleh karena itu, ada hubungan terbalik antara jumlah cakupan yang diminta dan kemungkinan mendapatkan izin pengguna. |
||||||
code_challenge |
Direkomendasikan
Menentukan |
||||||
code_challenge_method |
Direkomendasikan
Menentukan metode yang digunakan untuk mengenkode |
||||||
state |
Direkomendasikan
Menentukan nilai string apa pun yang digunakan aplikasi Anda untuk mempertahankan status antara permintaan otorisasi dan respons server otorisasi.
Server menampilkan nilai persis yang Anda kirim sebagai pasangan Anda dapat menggunakan parameter ini untuk beberapa tujuan, seperti mengarahkan pengguna ke
resource yang benar dalam aplikasi Anda, mengirim nonce, dan mengurangi pemalsuan permintaan
lintas situs. Karena |
||||||
login_hint |
Opsional
Jika aplikasi Anda mengetahui pengguna mana yang mencoba melakukan autentikasi, aplikasi tersebut dapat menggunakan parameter ini untuk memberikan petunjuk ke Server Autentikasi Google. Server menggunakan petunjuk untuk menyederhanakan alur login, baik dengan mengisi otomatis kolom email di formulir login maupun dengan memilih sesi multi-login yang sesuai. Tetapkan nilai parameter ke alamat email atau ID |
||||||
Contoh URL otorisasi
Tab di bawah menampilkan contoh URL otorisasi untuk berbagai opsi URI pengalihan.
URL-nya identik, kecuali untuk nilai parameter redirect_uri. URL
juga berisi parameter response_type dan client_id yang diperlukan serta
parameter state opsional. Setiap URL berisi baris baru dan spasi agar
lebih mudah dibaca.
Skema URI kustom
https://accounts.google.com/o/oauth2/v2/auth? scope=email%20profile& response_type=code& state=security_token%3D138r5719ru3e1%26url%3Dhttps%3A%2F%2Foauth2.example.com%2Ftoken& redirect_uri=com.example.app%3A/oauth2redirect& client_id=client_id
Alamat IP loopback
https://accounts.google.com/o/oauth2/v2/auth? scope=email%20profile& response_type=code& state=security_token%3D138r5719ru3e1%26url%3Dhttps%3A%2F%2Foauth2.example.com%2Ftoken& redirect_uri=http%3A//127.0.0.1%3A9004& client_id=client_id
Langkah 3: Google meminta izin pengguna
Pada langkah ini, pengguna memutuskan apakah akan memberikan akses yang diminta ke aplikasi Anda. Pada tahap ini, Google menampilkan jendela izin yang menunjukkan nama aplikasi Anda dan layanan Google API yang meminta izin untuk diakses dengan kredensial otorisasi pengguna dan ringkasan cakupan akses yang akan diberikan. Pengguna kemudian dapat mengizinkan untuk memberikan akses ke satu atau beberapa cakupan yang diminta oleh aplikasi Anda atau menolak permintaan tersebut.
Aplikasi Anda tidak perlu melakukan apa pun pada tahap ini karena aplikasi menunggu respons dari server OAuth 2.0 Google yang menunjukkan apakah akses diberikan. Respons tersebut dijelaskan di langkah berikut.
Error
Permintaan ke endpoint otorisasi OAuth 2.0 Google dapat menampilkan pesan error yang ditampilkan kepada pengguna, bukan alur autentikasi dan otorisasi yang diharapkan. Kode error umum dan resolusi yang disarankan adalah:
admin_policy_enforced
Akun Google tidak dapat mengizinkan satu atau beberapa cakupan yang diminta karena kebijakan administrator Google Workspace-nya. Lihat artikel bantuan Admin Google Workspace Mengontrol aplikasi pihak ketiga & internal mana yang dapat mengakses data Google Workspace untuk mengetahui informasi selengkapnya tentang cara administrator dapat membatasi akses ke semua cakupan atau cakupan sensitif dan terbatas hingga akses diberikan secara eksplisit ke client ID OAuth Anda.
disallowed_useragent
Endpoint otorisasi ditampilkan di dalam agen pengguna tersemat yang tidak diizinkan oleh Kebijakan OAuth 2.0 Google.
Developer iOS dan macOS mungkin mengalami error ini saat membuka permintaan otorisasi di
WKWebView.
Developer harus menggunakan library iOS seperti
Login dengan Google untuk iOS atau
AppAuth untuk iOS dari OpenID Foundation.
Developer web mungkin mengalami error ini saat aplikasi iOS atau macOS membuka link web umum di
agen pengguna tersemat dan pengguna membuka endpoint otorisasi OAuth 2.0 Google dari
situs Anda. Developer harus mengizinkan link umum dibuka di pengendali link default
sistem operasi, yang mencakup pengendali
Link Universal
atau aplikasi browser default. Library
SFSafariViewController
juga merupakan opsi yang didukung.
org_internal
Client ID OAuth dalam permintaan adalah bagian dari project yang membatasi akses ke Akun Google di Organisasi Google Cloud tertentu. Untuk mengetahui informasi selengkapnya tentang opsi konfigurasi ini, lihat bagian Jenis pengguna di artikel bantuan Menyiapkan layar izin OAuth.
deleted_client
Klien OAuth yang digunakan untuk membuat permintaan telah dihapus. Penghapusan dapat terjadi secara manual atau otomatis dalam kasus klien yang tidak digunakan . Klien yang dihapus dapat dipulihkan dalam waktu 30 hari setelah penghapusan. Pelajari lebih lanjut .
invalid_grant
Jika Anda menggunakan
verifier dan
tantangan kode, parameter code_callenge tidak valid atau tidak ada. Pastikan parameter code_challenge ditetapkan dengan benar.
Saat memperbarui token akses, token mungkin telah habis masa berlakunya atau telah dibatalkan. Autentikasi pengguna lagi dan minta izin pengguna untuk mendapatkan token baru. Jika Anda terus melihat error ini, pastikan aplikasi Anda telah dikonfigurasi dengan benar dan Anda menggunakan token dan parameter yang benar dalam permintaan Anda. Jika tidak, akun pengguna mungkin telah dihapus atau dinonaktifkan.
redirect_uri_mismatch
redirect_uri yang diteruskan dalam permintaan otorisasi tidak cocok dengan URI pengalihan yang diizinkan untuk client ID OAuth. Tinjau URI pengalihan yang diotorisasi di
halaman Klien
Konsol Google Cloud.
redirect_uri yang diteruskan mungkin tidak valid untuk jenis klien.
Parameter redirect_uri dapat merujuk ke alur out-of-band (OOB) OAuth yang tidak digunakan lagi dan tidak didukung lagi. Lihat
panduan migrasi untuk mengupdate
integrasi Anda.
invalid_request
Terjadi error pada permintaan yang Anda buat. Hal ini dapat disebabkan oleh beberapa alasan:
- Permintaan tidak diformat dengan benar
- Permintaan tidak memiliki parameter yang diperlukan
- Permintaan tersebut menggunakan metode otorisasi yang tidak didukung oleh Google. Memverifikasi bahwa integrasi OAuth Anda menggunakan metode integrasi yang direkomendasikan
- Skema kustom yang tidak didukung digunakan untuk URI pengalihan. Jika Anda melihat pesan error Skema URI kustom tidak didukung di aplikasi Android atau Aplikasi Chrome, pelajari lebih lanjut alternatif skema URI kustom.
Langkah 4: Tangani respons server OAuth 2.0
Cara aplikasi Anda menerima respons otorisasi bergantung pada
skema URI pengalihan yang digunakannya. Terlepas dari skemanya, respons akan berisi kode otorisasi (code) atau error
(error). Misalnya, error=access_denied menunjukkan bahwa pengguna
menolak permintaan.
Jika pengguna memberikan akses ke aplikasi Anda, Anda dapat menukar kode otorisasi dengan token akses dan token refresh seperti yang dijelaskan pada langkah berikutnya.
Langkah 5: Tukarkan kode otorisasi dengan token refresh dan akses
Untuk menukar kode otorisasi dengan token akses, panggil endpoint https://oauth2.googleapis.com/token dan tetapkan parameter berikut:
| Kolom | |
|---|---|
client_id |
Client ID yang diperoleh dari halaman Klien Konsol Cloud. |
client_secret |
Opsional
Rahasia klien yang diperoleh dari halaman Klien Konsol Cloud. |
code |
Kode otorisasi yang ditampilkan dari permintaan awal. |
code_verifier |
Pemverifikasi kode yang Anda buat di Langkah 1. |
grant_type |
Seperti yang ditentukan dalam spesifikasi OAuth 2.0, nilai kolom ini harus ditetapkan ke authorization_code. |
redirect_uri |
Salah satu URI pengalihan yang tercantum untuk project Anda di
halaman Klien
Konsol Cloud untuk
client_id yang diberikan. |
Meskipun penggunaan DPoP bersifat opsional, sebaiknya gunakan untuk meningkatkan keamanan. Keamanan DPoP bergantung pada kunci pribadi yang dibatasi untuk satu perangkat; sebaiknya simpan kunci tersebut dengan cara yang tidak dapat disalin dari perangkat, misalnya dengan menggunakan TPM, Secure Enclave, atau keystore yang didukung hardware lainnya. Untuk menggunakan DPoP, aplikasi Anda harus membuat JWT bukti DPoP baru yang unik untuk setiap permintaan ke endpoint token dan menambahkannya sebagai header permintaan HTTP.
| Header | Wajib | Deskripsi |
|---|---|---|
DPoP |
Opsional | Bukti DPoP adalah JWT yang membuktikan
kepemilikan kunci pribadi. Ini adalah header, bukan parameter. Jika disediakan, token yang ditampilkan akan terikat ke kunci ini. Bukti baru yang unik harus dibuat untuk setiap permintaan dan
harus menyertakan klaim htm (metode HTTP) dan htu (URI HTTP) yang
cocok dengan permintaan. |
Cuplikan berikut menunjukkan contoh permintaan:
POST /token HTTP/1.1 Host: oauth2.googleapis.com Content-Type: application/x-www-form-urlencoded DPoP: eyJ0eXAiOiJkcG9wK2p3dCIsImFsZyI6IkVTMjU2IiwiandrIjp7Imt0eSI6Ik\ VDIiwieCI6Imw4dEZyaHgtMzR0VjNoUklDUkRZOXpDa0RscEJoRjQyVVFVZldWQVdCR\ nMiLCJ5IjoiOVZFNGpmX09rX282NHpiVFRsY3VOSmFqSG10NnY5VERWclUwQ2R2R1JE\ QSIsImNydiI6IlAtMjU2In19.eyJqdGkiOiItQndDM0VTYzZhY2MybFRjIiwiaHRtIj\ oiUE9TVCIsImh0dSI6Imh0dHBzOi8vc2VydmVyLmV4YW1wbGUuY29tL3Rva2VuIiwia\ WF0IjoxNTYyMjYyNjE2fQ.2-GxA6T8lP4vfrg8v-FdWP0A0zdrj8igiMLvqRMUvwnQg\ 4PtFLbdLXiOSsX0x7NVY-FNyJK70nfbV37xRZT3Lg code=4/P7q7W91a-oMsCeLvIaQm6bTrgtp7& client_id=your_client_id& redirect_uri=http://127.0.0.1:9004& grant_type=authorization_code
Membuat bukti DPoP
Langkah-langkah berikut menunjukkan cara membuat bukti DPoP menggunakan OpenSSL dari command line:
- Buat pasangan kunci EC P-256:
openssl ecparam -name prime256v1 -genkey -noout -out dpop_private.pem openssl ec -in dpop_private.pem -pubout -out dpop_public.pem
- Buat header DPoP:
Header harus menyertakan klaim
typ,alg, danjwk(kunci publik). Nilaixdanyadalah koordinat berenkode Base64Url dari kunci publik EC Anda. Enkode Base64Url JSON ini:{ "typ":"dpop+jwt", "alg":"ES256", "jwk": { "kty":"EC", "x":"YOUR_PUBLIC_KEY_X", "y":"YOUR_PUBLIC_KEY_Y", "crv":"P-256" } } - Buat payload DPoP:
Payload harus menyertakan
jti(ID unik untuk permintaan),htm(metode HTTP, misalnya,POST),htu(URI HTTP, misalnya,https://oauth2.googleapis.com/token), daniat(diterbitkan pada waktu). Jika Anda menerima nonce dari server di headerDPoP-Noncepada respons terhadap permintaan sebelumnya, Anda harus menyertakan nilai nonce tersebut dalam klaimnonce. Klaim nonce bersifat opsional untuk pertukaran kode otorisasi dan hanya digunakan jika header DPoP-Nonce telah diterima sebelumnya. Enkode Base64Url JSON ini:{ "jti":"JTI_VALUE", "htm":"POST", "htu":"https://oauth2.googleapis.com/token", "iat":YOUR_JWT_ISSUED_TIME, "nonce":"SERVER_PROVIDED_NONCE" }Nilai
jtibergantung pada jenis pertukaran:- Untuk pertukaran kode otorisasi,
jtiharus berupa hash SHA256 berenkode Base64Url dari kode otorisasi:"jti":"BASE64URL(SHA256(AUTHORIZATION_CODE))". - Untuk pertukaran token refresh,
jtiharus berupa ID unik per permintaan:"jti":"YOUR_UNIQUE_PER_REQUEST_IDENTIFIER".
- Untuk pertukaran kode otorisasi,
- Menandatangani bukti:
Gabungkan header dan payload yang dienkode dengan titik (
.), lalu tanda tangani hasilnya dengan kunci pribadi Anda menggunakan ES256. Perhatikan bahwa JWS mengharuskan tanda tangan dalam formatR | Smentah yang digabungkan (64 byte untuk P-256). Jika menggunakan OpenSSL secara langsung, Anda harus mengonversi tanda tangan berenkode DER ASN.1 default ke format mentah ini.
Pertukaran yang berhasil ditunjukkan dengan respons 200 OK
yang berisi token. Jika bukti DPoP yang valid digunakan selama
pertukaran, token refresh yang ditampilkan Google akan terikat DPoP ke kunci Anda, tetapi token akses
tidak akan terikat DPoP. Token akses akan mempertahankan token_type dari
Bearer, bukan DPoP.
Selain itu, Google menampilkan header HTTP DPoP-Nonce dalam respons.
Klien Anda harus meng-cache nonce ini dan menyertakannya dalam klaim nonce dari bukti DPoP
dalam permintaan berikutnya (seperti saat menukar token refresh dengan token akses baru, atau saat
memanggil API yang dilindungi DPoP). Dengan menggunakan nonce yang dikeluarkan lebih awal ini, Anda dapat menghindari kegagalan round-trip tambahan (use_dpop_nonce) pada permintaan berikutnya.
Bukti DPoP harus disertakan untuk permintaan pertukaran token yang dibuat dengan token refresh yang terikat DPoP.
Pertukaran yang gagal terjadi jika header DPoP
tidak ada saat diharapkan, tidak valid, atau jika bukti menggunakan kunci yang berbeda dengan
kunci yang terikat ke token. Dalam kasus ini, server akan menampilkan error 400 Bad Request.
Jika bukti DPoP memiliki klaim htm atau htu yang tidak cocok, iat yang sudah tidak berlaku, jti yang digunakan kembali, atau tanda tangan yang tidak valid, Google akan menampilkan kode error invalid_dpop_proof.
Jika nonce DPoP diperlukan, seperti selama pertukaran token refresh, dan bukti DPoP tidak memiliki klaim nonce, atau nilai nonce tidak dapat diterima oleh server (misalnya, sudah tidak berlaku, sudah digunakan, atau salah), Google akan menampilkan kode error use_dpop_nonce beserta header HTTP DPoP-Nonce yang berisi nonce baru yang dapat Anda gunakan dalam permintaan berikutnya.
Kegagalan lainnya mungkin menampilkan invalid_grant.
Google merespons permintaan ini dengan menampilkan objek JSON yang berisi token akses berumur pendek dan token refresh.
Respons berisi kolom berikut:
| Kolom | |
|---|---|
access_token |
Token yang dikirim aplikasi Anda untuk mengizinkan permintaan Google API. |
expires_in |
Sisa masa aktif token akses dalam detik. |
id_token |
Catatan: Properti ini hanya ditampilkan jika permintaan Anda menyertakan cakupan identitas,
seperti openid, profile, atau email. Nilainya adalah
Token Web JSON (JWT) yang berisi informasi identitas yang ditandatangani secara digital tentang
pengguna. |
refresh_token |
Token yang dapat Anda gunakan untuk mendapatkan token akses baru. Token refresh valid hingga pengguna mencabut akses atau masa berlaku token refresh berakhir. Jika DPoP digunakan, token refresh terikat ke kunci pribadi yang digunakan untuk menandatangani bukti DPoP. Perhatikan bahwa token refresh selalu ditampilkan untuk aplikasi yang diinstal. |
refresh_token_expires_in |
Sisa masa aktif token refresh dalam detik. Nilai ini hanya ditetapkan saat pengguna memberikan akses berbasis waktu. |
scope |
Cakupan akses yang diberikan oleh access_token dinyatakan sebagai daftar string yang dipisahkan spasi dan peka huruf besar/kecil. |
token_type |
Jenis token yang ditampilkan. Nilai ini selalu Bearer, meskipun DPoP digunakan. |
Cuplikan berikut menunjukkan contoh header respons dan isi yang berhasil saat DPoP digunakan:
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
DPoP-Nonce: AN3XwJjZsjnb0ZuWkRlek8QU7wY-Zhf-5IP6tO0tORz0KgtDT1Bo8FX-w4nz3r5lnepI
{
"access_token": "1/fFAGRNJru1FTz70BzhT3Zg",
"expires_in": 3920,
"token_type": "Bearer",
"scope": "https://www.googleapis.com/auth/drive.metadata.readonly https://www.googleapis.com/auth/calendar.readonly",
"refresh_token": "1//xEoDL4iW3cxlI7yDbSRFYNG01kVKM2C-259HOF2aQbI"
}Langkah 6: Periksa cakupan yang diberikan pengguna
Saat meminta beberapa izin (cakupan), pengguna mungkin tidak memberikan akses ke semua izin tersebut kepada aplikasi Anda. Aplikasi Anda harus memverifikasi cakupan mana yang benar-benar diberikan dan menangani situasi saat beberapa izin ditolak dengan baik, biasanya dengan menonaktifkan fitur yang mengandalkan cakupan yang ditolak tersebut.
Namun, terdapat pengecualian. Aplikasi Google Workspace Enterprise dengan delegasi otoritas di seluruh domain, atau aplikasi yang ditandai sebagai Tepercaya, akan mengabaikan layar izin terperinci. Untuk aplikasi ini, pengguna tidak akan melihat layar izin terperinci. Sebagai gantinya, aplikasi Anda akan menerima semua cakupan yang diminta atau tidak sama sekali.
Untuk informasi yang lebih mendetail, lihat Cara menangani izin terperinci.
Untuk memeriksa apakah pengguna telah memberi aplikasi Anda akses ke cakupan tertentu,
periksa kolom scope dalam respons token akses. Cakupan akses yang diberikan oleh
access_token yang dinyatakan sebagai daftar string yang dipisahkan spasi dan peka huruf besar/kecil.
Misalnya, contoh respons token akses berikut menunjukkan bahwa pengguna telah memberikan akses ke aplikasi Anda untuk izin aktivitas Drive hanya baca dan acara Kalender:
{ "access_token": "1/fFAGRNJru1FTz70BzhT3Zg", "expires_in": 3920, "token_type": "Bearer", "scope": "https://www.googleapis.com/auth/drive.metadata.readonly https://www.googleapis.com/auth/calendar.readonly", "refresh_token": "1//xEoDL4iW3cxlI7yDbSRFYNG01kVKM2C-259HOF2aQbI" }
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. Dalam sebagian besar
kasus, 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 harus 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
Token akses akan habis masa berlakunya secara berkala dan menjadi kredensial yang tidak valid untuk permintaan API terkait. Anda dapat memperbarui 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 mengirimkan permintaan POST HTTPS
ke server otorisasi Google (https://oauth2.googleapis.com/token) yang
menyertakan parameter berikut dalam isi permintaan:
| Nama | Nilai |
|---|---|
client_id |
Client ID yang diperoleh dari Konsol API. |
client_secret |
Opsional
Rahasia klien yang diperoleh dari Konsol API.
( |
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. |
Meskipun penggunaan DPoP bersifat opsional, sebaiknya gunakan untuk meningkatkan keamanan. Untuk menggunakan DPoP dengan token refresh, aplikasi Anda harus membuat JWT bukti DPoP baru yang unik untuk setiap permintaan ke endpoint token. Bukti ini harus ditandatangani dengan kunci pribadi yang sama dengan yang digunakan selama pertukaran kode otorisasi awal. Aplikasi Anda menambahkan bukti sebagai header permintaan HTTP.
| Header | Wajib | Deskripsi |
|---|---|---|
DPoP |
Opsional | Bukti DPoP adalah JWT yang membuktikan
kepemilikan kunci pribadi. Ini adalah header, bukan parameter. Jika disediakan, token yang ditampilkan akan terikat ke kunci ini. Bukti baru yang unik harus dibuat untuk setiap permintaan dan
harus menyertakan klaim htm (metode HTTP) dan htu (URI HTTP) yang
cocok dengan permintaan. |
Cuplikan berikut menunjukkan contoh permintaan:
POST /token HTTP/1.1 Host: oauth2.googleapis.com Content-Type: application/x-www-form-urlencoded DPoP: DPOP_PROOF_JWT client_id=your_client_id& refresh_token=refresh_token& grant_type=refresh_token
Untuk menggunakan DPoP dengan token refresh, Anda harus membuat JWT bukti DPoP baru yang unik untuk permintaan tersebut. Lihat Membuat bukti DPoP untuk mengetahui petunjuk langkah demi langkah dalam membuat pasangan kunci dan membuat JWT.
Pertukaran yang berhasil ditunjukkan dengan respons 200 OK
yang berisi token akses baru. Jika DPoP digunakan, token_type adalah Bearer. Respons yang berhasil mengonfirmasi
bahwa bukti DPoP untuk token refresh telah diterima. Google juga dapat menampilkan header HTTP
DPoP-Nonce baru dalam respons; jika ditampilkan, klien Anda harus meng-cache nonce ini
dan menyertakannya dalam klaim nonce bukti DPoP dalam permintaan berikutnya.
Pertukaran yang gagal terjadi jika header DPoP tidak ada, tidak valid, atau menggunakan kunci yang salah. Untuk mengetahui detail tentang kode error DPoP tertentu dan penanganan nonce, lihat Pertukaran gagal.
Cuplikan berikut menunjukkan contoh header respons dan isi yang berhasil saat DPoP digunakan:
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
DPoP-Nonce: AN3XwJjZsjnb0ZuWkRlek8QU7wY-Zhf-5IP6tO0tORz0KgtDT1Bo8FX-w4nz3r5lnepI
{
"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 dikeluarkan; satu batas per kombinasi klien/pengguna, dan batas lainnya per pengguna di semua klien. Anda harus menyimpan token refresh dalam penyimpanan jangka panjang dan terus menggunakannya selama masih valid. Jika aplikasi Anda meminta terlalu banyak token refresh, aplikasi tersebut mungkin akan mencapai batas ini, sehingga token refresh yang lebih lama akan berhenti berfungsi.
Pencabutan token
Dalam beberapa kasus, pengguna mungkin ingin mencabut akses yang diberikan ke aplikasi. Pengguna dapat mencabut akses dengan membuka Setelan Akun. Lihat bagian Menghapus akses situs atau aplikasi di Situs & aplikasi pihak ketiga yang memiliki akses ke akun Anda dalam dokumen dukungan untuk mengetahui informasi selengkapnya.
Aplikasi juga dapat mencabut akses yang diberikan kepadanya secara terprogram. Pencabutan terprogram penting dalam situasi 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 tersebut 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.
Metode pengalihan aplikasi
Skema URI kustom
Skema URI kustom adalah bentuk deeplink yang menggunakan skema yang ditentukan secara kustom untuk membuka aplikasi Anda.
Alternatif penggunaan skema URI kustom di aplikasi Chrome
Gunakan Chrome Identity API yang mengirimkan respons OAuth 2.0 langsung ke aplikasi Anda, sehingga tidak memerlukan URI pengalihan.
Alamat IP loopback (desktop macOS, Linux, Windows)
Untuk menerima kode otorisasi menggunakan URL ini, aplikasi Anda harus memproses server web lokal. Hal ini dapat dilakukan di banyak platform, tetapi tidak semua. Namun, jika platform Anda mendukungnya, ini adalah mekanisme yang direkomendasikan untuk mendapatkan kode otorisasi.
Saat aplikasi Anda menerima respons otorisasi, untuk kegunaan terbaik, aplikasi harus merespons dengan menampilkan halaman HTML yang menginstruksikan pengguna untuk menutup browser dan kembali ke aplikasi Anda.
| Penggunaan yang direkomendasikan | Aplikasi desktop macOS, Linux, dan Windows |
| Nilai formulir | Tetapkan jenis aplikasi ke aplikasi desktop. |
Salin/tempel manual (Tidak digunakan lagi)
Melindungi aplikasi Anda
Memverifikasi kepemilikan aplikasi untuk Chrome
Anda dapat memverifikasi kepemilikan aplikasi untuk mengurangi risiko peniruan identitas aplikasi.
Untuk menyelesaikan proses verifikasi, Anda harus menggunakan akun Developer Chrome Web Store. Persyaratan berikut harus dipenuhi agar verifikasi berhasil:
- Anda harus memiliki item terdaftar di Dasbor Developer Chrome Web Store dengan ID item yang sama dengan klien OAuth Ekstensi Chrome yang sedang Anda selesaikan verifikasinya.
- Anda harus menjadi penayang untuk item Chrome Web Store. Pelajari lebih lanjut pengelolaan akses di Dasbor Developer Chrome Web Store.
Di bagian Verify App Ownership pada klien Ekstensi Chrome, klik tombol Verify Ownership untuk menyelesaikan proses verifikasi.
Catatan: Tunggu beberapa menit sebelum menyelesaikan proses verifikasi setelah memberikan akses ke akun Anda.
Jika verifikasi berhasil, notifikasi akan ditampilkan untuk mengonfirmasi keberhasilan proses verifikasi. Jika tidak, dialog error akan ditampilkan.
Untuk memperbaiki verifikasi yang gagal, coba langkah-langkah berikut:
- Pastikan ada item terdaftar di Dasbor Developer Chrome Web Store dengan ID item yang sama dengan klien OAuth Ekstensi Chrome yang verifikasinya sedang Anda selesaikan.
- Pastikan Anda adalah penayang untuk aplikasi, yaitu, Anda harus menjadi penayang individu aplikasi atau anggota penayang grup aplikasi. Pelajari lebih lanjut pengelolaan akses di Dasbor Developer Chrome Web Store.
- Jika Anda baru saja memperbarui daftar penayang grup, pastikan daftar keanggotaan penayang grup disinkronkan di Dasbor Developer Chrome Web Store. Pelajari lebih lanjut cara menyinkronkan daftar keanggotaan penayang.
App Check (khusus iOS)
Fitur App Check membantu melindungi aplikasi iOS Anda dari penggunaan yang tidak sah dengan menggunakan layanan App Attest Apple untuk memverifikasi bahwa permintaan yang dibuat ke endpoint Google OAuth 2.0 berasal dari aplikasi asli Anda. Hal ini membantu mengurangi risiko peniruan identitas aplikasi.
Mengaktifkan App Check untuk Klien iOS Anda
Persyaratan berikut harus dipenuhi agar berhasil mengaktifkan App Check untuk klien iOS Anda:- Anda harus menentukan ID tim untuk klien iOS Anda.
- Anda tidak boleh menggunakan karakter pengganti di ID paket karena dapat me-resolve ke lebih dari satu aplikasi. Artinya, ID paket tidak boleh menyertakan simbol tanda bintang (*).
Setelah mengaktifkan App Check, Anda akan mulai melihat metrik yang terkait dengan permintaan OAuth dari klien Anda di tampilan edit klien OAuth. Permintaan dari sumber yang tidak diverifikasi tidak akan diblokir hingga Anda menerapkan App Check. Informasi di halaman pemantauan metrik dapat membantu Anda menentukan kapan harus memulai penerapan.
Anda mungkin melihat error terkait fitur App Check saat mengaktifkan App Check untuk aplikasi iOS. Untuk memperbaiki error ini, coba langkah-langkah berikut:
- Pastikan ID paket dan ID tim yang Anda tentukan valid.
- Pastikan Anda tidak menggunakan karakter pengganti untuk ID paket.
Menerapkan App Check untuk Klien iOS Anda
Mengaktifkan App Check untuk aplikasi Anda tidak otomatis memblokir permintaan yang tidak dikenali. Untuk menerapkan perlindungan ini, buka tampilan edit klien iOS Anda. Di sana, Anda akan melihat metrik App Check di sebelah kanan halaman di bagian Google Identity for iOS. Metrik mencakup informasi berikut:- Jumlah permintaan terverifikasi - permintaan yang memiliki token App Check yang valid. Setelah Anda mengaktifkan penerapan App Check, hanya permintaan dalam kategori ini yang akan berhasil.
- Jumlah permintaan yang tidak diverifikasi: kemungkinan permintaan klien yang sudah tidak berlaku - permintaan yang tidak memiliki token App Check; permintaan ini mungkin berasal dari versi lama aplikasi Anda yang tidak menyertakan implementasi App Check.
- Jumlah permintaan yang tidak diverifikasi: permintaan dengan asal tidak diketahui - permintaan yang tidak memiliki token App Check dan sepertinya tidak berasal dari aplikasi Anda.
- Jumlah permintaan yang belum diverifikasi: permintaan tidak valid - permintaan dengan token App Check yang tidak valid, yang mungkin berasal dari klien tidak sah yang mencoba meniru aplikasi Anda, atau dari lingkungan yang diemulasikan.
Untuk menerapkan App Check, klik tombol ENFORCE dan konfirmasi pilihan Anda. Setelah penerapan aktif, semua permintaan yang belum diverifikasi dari klien Anda akan ditolak.
Catatan: setelah Anda mengaktifkan penerapan, perlu waktu hingga 15 menit agar perubahan diterapkan.
Mencabut penerapan App Check untuk Klien iOS Anda
Menonaktifkan penerapan App Check untuk aplikasi Anda akan menghentikan penerapan dan akan mengizinkan semua permintaan dari klien Anda ke endpoint Google OAuth 2.0, termasuk permintaan yang tidak diverifikasi.
Untuk membatalkan penerapan App Check bagi klien iOS, buka tampilan edit klien iOS, lalu klik tombol UNENFORCE dan konfirmasi pilihan Anda.
Catatan: setelah menonaktifkan penerapan App Check, perlu waktu hingga 15 menit agar perubahan diterapkan.
Menonaktifkan App Check untuk Klien iOS Anda
Menonaktifkan App Check untuk aplikasi Anda akan menghentikan semua pemantauan dan penerapan App Check. Pertimbangkan untuk tidak menerapkan App Check agar Anda dapat terus memantau metrik untuk klien Anda.
Untuk menonaktifkan App Check bagi klien iOS, buka tampilan edit klien iOS dan nonaktifkan tombol Protect your OAuth client from abuse with Firebase App Check.
Catatan: setelah menonaktifkan App Check, perlu waktu hingga 15 menit agar perubahan diterapkan.
Akses berbasis waktu
Akses berbasis waktu memungkinkan pengguna memberi aplikasi Anda akses ke data mereka selama durasi terbatas untuk menyelesaikan tindakan. Akses berbasis waktu tersedia di produk Google tertentu selama alur izin, yang memberi pengguna opsi untuk memberikan akses selama jangka waktu terbatas. Contohnya adalah Data Portability API yang memungkinkan transfer data satu kali.
Saat pengguna memberikan akses berbasis waktu ke aplikasi Anda, masa berlaku token refresh akan berakhir setelah
durasi yang ditentukan. Perhatikan bahwa token refresh dapat dibatalkan lebih awal dalam keadaan tertentu; lihat kasus ini untuk mengetahui detailnya. Kolom refresh_token_expires_in yang ditampilkan dalam respons pertukaran kode otorisasi mewakili waktu yang tersisa hingga token refresh habis masa berlakunya dalam kasus tersebut.
Bacaan Lebih Lanjut
Praktik Terbaik Saat Ini dari IETF OAuth 2.0 for Aplikasi Native menetapkan banyak praktik terbaik yang didokumentasikan di sini.
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 Anda tentang perubahan besar pada akun pengguna. Kemudian, Anda 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 daftar lengkap peristiwa yang tersedia.