Halaman ini menjelaskan cara melakukan autentikasi ke resource yang diamankan Identity-Aware Proxy (IAP) dari akun pengguna atau akun layanan.
Akun pengguna dimiliki oleh pengguna individual. Anda mengautentikasi akun pengguna saat aplikasi Anda memerlukan akses ke resource yang diamankan IAP atas nama pengguna. Untuk informasi selengkapnya, lihat Akun pengguna.
Akun layanan adalah milik aplikasi, bukan milik pengguna individual. Anda mengautentikasi akun layanan jika ingin mengizinkan aplikasi mengakses resource yang diamankan oleh IAP. Untuk mengetahui informasi selengkapnya, lihat Akun layanan.
Sebelum memulai
Sebelum memulai, Anda akan memerlukan hal berikut:
- Aplikasi yang diamankan oleh IAP yang ingin Anda hubungkan secara terprogram menggunakan akun developer, akun layanan, atau kredensial aplikasi seluler.
Mengautentikasi akun pengguna
Anda dapat mengaktifkan akses pengguna ke aplikasi dari desktop atau aplikasi seluler agar program dapat berinteraksi dengan resource yang diamankan oleh IAP.
Mengautentikasi dari aplikasi seluler
- Buat atau gunakan client ID OAuth 2.0 yang sudah ada untuk aplikasi seluler Anda. Untuk menggunakan client ID OAuth 2.0 yang sudah ada, ikuti langkah-langkah di bagian Cara berbagi Klien OAuth.
- Izinkan client ID OAuth untuk akses terprogram bagi aplikasi.
- Dapatkan token ID untuk client ID yang diamankan IAP.
- Android: Gunakan Google Sign-In API untuk meminta token OpenID Connect (OIDC). Tetapkan client ID
requestIdToken
ke client ID untuk resource yang ingin Anda hubungkan. - iOS: Gunakan Login dengan Google untuk mendapatkan token ID.
- Android: Gunakan Google Sign-In API untuk meminta token OpenID Connect (OIDC). Tetapkan client ID
- Sertakan token ID dalam header
Authorization: Bearer
untuk membuat permintaan terautentikasi ke resource yang diamankan IAP.
Mengautentikasi dari aplikasi desktop
Bagian ini menjelaskan cara mengautentikasi akun pengguna dari command line desktop.
- Untuk mengizinkan developer mengakses aplikasi Anda dari command line, buat client ID OAuth 2.0 desktop atau bagikan client ID OAuth desktop yang sudah ada.
- Izinkan client ID OAuth untuk akses terprogram bagi aplikasi.
Login ke aplikasi
Setiap developer yang ingin mengakses aplikasi yang diamankan oleh IAP harus login terlebih dahulu. Anda dapat mengemas proses ini menjadi skrip, misalnya dengan menggunakan gcloud CLI. Berikut adalah contoh penggunaan curl untuk login dan menghasilkan token yang dapat digunakan untuk mengakses aplikasi:
- Login ke akun Anda yang memiliki akses ke resource Google Cloud.
-
Memulai server lokal yang dapat menjalankan echo permintaan masuk.
$ nc -k -l 4444
CATATAN: Perintah ini menggunakan utilitas NetCat. Anda dapat menggunakan utilitas pilihan Anda. -
Buka URI berikut dengan
DESKTOP_CLIENT_ID
sebagai client ID Aplikasi desktop:https://accounts.google.com/o/oauth2/v2/auth?client_id=DESKTOP_CLIENT_ID&response_type=code&scope=openid%20email&access_type=offline&redirect_uri=http://localhost:4444&cred_ref=true
-
Pada output server lokal, cari parameter permintaan. Anda akan melihat sesuatu seperti berikut:
GET /?code=$CODE&scope=email%20openid%20https://www.googleapis.com/auth/userinfo.email&hd=google.com&prompt=consent HTTP/1.1
salin CODE untuk menggantiAUTH_CODE
di bawah beserta client ID dan secret aplikasi Desktop:curl --verbose \ --data client_id=DESKTOP_CLIENT_ID \ --data client_secret=DESKTOP_CLIENT_SECRET \ --data code=AUTH_CODE \ --data redirect_uri=http://localhost:4444 \ --data grant_type=authorization_code \ https://oauth2.googleapis.com/token
Kode ini menampilkan objek JSON dengan kolom
id_token
yang dapat Anda gunakan untuk mengakses aplikasi.
Mengakses aplikasi
Untuk mengakses aplikasi, gunakan
id_token
sebagai berikut:
curl --verbose --header 'Authorization: Bearer ID_TOKEN' URL
Token Refresh
Anda dapat menggunakan token refresh yang dibuat selama alur login untuk mendapatkan token ID baru. Hal ini berguna ketika token ID asli kedaluwarsa. Setiap token ID berlaku selama sekitar satu jam. Selama waktu tersebut, Anda dapat membuat beberapa permintaan ke aplikasi tertentu.
Berikut adalah contoh penggunaan curl untuk menggunakan token refresh guna mendapatkan token ID
baru. Pada contoh berikut,
REFRESH_TOKEN
adalah token
dari alur login.
DESKTOP_CLIENT_ID
, dan
DESKTOP_CLIENT_SECRET
sama
seperti yang digunakan dalam alur login:
curl --verbose \ --data client_id=DESKTOP_CLIENT_ID \ --data client_secret=DESKTOP_CLIENT_SECRET \ --data refresh_token=REFRESH_TOKEN \ --data grant_type=refresh_token \ https://oauth2.googleapis.com/token
Kode ini menampilkan objek JSON dengan kolom id_token
baru yang dapat Anda gunakan untuk mengakses aplikasi.
Mengautentikasi dari akun layanan
Gunakan token OpenID Connect (OIDC) untuk mengautentikasi akun layanan ke resource yang diamankan IAP.
- Buat atau gunakan client ID OAuth 2.0 yang sudah ada. Untuk menggunakan client ID OAuth 2.0 yang ada, ikuti langkah-langkah dalam Cara berbagi Klien OAuth.
- Izinkan client ID OAuth untuk akses terprogram bagi aplikasi.
Anda juga harus menambahkan akun layanan ke daftar akses
untuk project yang diamankan oleh IAP. Contoh kode berikut menunjukkan cara mendapatkan token OIDC. Anda harus menyertakan
token dalam header Authorization: Bearer
untuk membuat permintaan autentikasi
ke resource yang diamankan IAP.
Mendapatkan token OIDC untuk akun layanan default
Jika ingin mendapatkan token OIDC untuk akun layanan default untuk Compute Engine, App Engine, atau Cloud Run, Anda dapat menggunakan contoh kode berikut untuk membuat token agar dapat mengakses resource yang diamankan oleh IAP:
C#
Go
Untuk mengautentikasi ke IAP, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.
Java
Node.js
PHP
Untuk mengautentikasi ke IAP, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.
Python
Untuk mengautentikasi ke IAP, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.
Ruby
Untuk mengautentikasi ke IAP, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.
Mendapatkan token OIDC dari file kunci akun layanan lokal
Jika memiliki file kunci akun layanan, Anda dapat menyesuaikan contoh kode sebelumnya untuk menyediakan file kunci akun layanan.
Bash
#!/usr/bin/env bash
set -euo pipefail
get_token() {
# Get the bearer token in exchange for the service account credentials.
local service_account_key_file_path="${1}"
local iap_client_id="${2}"
local iam_scope="https://www.googleapis.com/auth/iam"
local oauth_token_uri="https://www.googleapis.com/oauth2/v4/token"
local private_key_id="$(cat "${service_account_key_file_path}" | jq -r '.private_key_id')"
local client_email="$(cat "${service_account_key_file_path}" | jq -r '.client_email')"
local private_key="$(cat "${service_account_key_file_path}" | jq -r '.private_key')"
local issued_at="$(date +%s)"
local expires_at="$((issued_at + 600))"
local header="{'alg':'RS256','typ':'JWT','kid':'${private_key_id}'}"
local header_base64="$(echo "${header}" | base64)"
local payload="{'iss':'${client_email}','aud':'${oauth_token_uri}','exp':${expires_at},'iat':${issued_at},'sub':'${client_email}','target_audience':'${iap_client_id}'}"
local payload_base64="$(echo "${payload}" | base64)"
local signature_base64="$(printf %s "${header_base64}.${payload_base64}" | openssl dgst -binary -sha256 -sign <(printf '%s\n' "${private_key}") | base64)"
local assertion="${header_base64}.${payload_base64}.${signature_base64}"
local token_payload="$(curl -s \
--data-urlencode "grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer" \
--data-urlencode "assertion=${assertion}" \
https://www.googleapis.com/oauth2/v4/token)"
local bearer_id_token="$(echo "${token_payload}" | jq -r '.id_token')"
echo "${bearer_id_token}"
}
main(){
# TODO: Replace the following variables:
SERVICE_ACCOUNT_KEY="service_account_key_file_path"
IAP_CLIENT_ID="iap_client_id"
URL="application_url"
# Obtain the ID token.
ID_TOKEN=$(get_token "${SERVICE_ACCOUNT_KEY}" "${IAP_CLIENT_ID}")
# Access the application with the ID token.
curl --header "Authorization: Bearer ${ID_TOKEN}" "${URL}"
}
main "$@"
Mendapatkan token OIDC dalam semua kasus lainnya
Dalam kasus lainnya, gunakan API kredensial IAM untuk membuat token OIDC dengan meniru identitas akun layanan target tepat sebelum mengakses resource yang diamankan IAP. Proses ini melibatkan langkah-langkah berikut:
Berikan akun layanan panggilan (akun layanan yang terkait dengan kode yang mendapatkan token ID) dengan peran Service Account OpenID Connect Identity Token Creator (
roles/iam.serviceAccountOpenIdTokenCreator
).Hal ini memungkinkan akun layanan pemanggil untuk meniru akun layanan target.
Gunakan kredensial yang diberikan oleh akun layanan panggilan untuk memanggil metode generateIdToken pada akun layanan target.
Tetapkan kolom
audience
ke client ID.
Untuk petunjuk langkah demi langkah, lihat Membuat token ID.
Mengautentikasi dari Header Otorisasi Proxy
Jika aplikasi Anda menggunakan header permintaan Authorization
, Anda dapat
menyertakan token ID dalam header Proxy-Authorization: Bearer
. Jika token ID yang valid ditemukan di header Proxy-Authorization
, IAP akan mengizinkan permintaan tersebut bersama token tersebut. Setelah memberi otorisasi
permintaan, IAP meneruskan header Authorization
ke
aplikasi Anda tanpa memproses konten.
Jika tidak ada token ID yang valid di header Proxy-Authorization
, IAP akan terus memproses header Authorization
dan menghapus header Proxy-Authorization
sebelum meneruskan permintaan tersebut ke aplikasi Anda.
Langkah selanjutnya
- Pelajari Otorisasi: Token Pembawa lebih lanjut.
- Cobalah Login untuk Android atau Login untuk iOS.