Menggunakan Firebase untuk mengautentikasi pengguna
Halaman ini menjelaskan cara mendukung autentikasi pengguna di API Gateway.
Untuk mengautentikasi pengguna, aplikasi klien harus mengirimkan Token Web JSON (JWT) di header otorisasi permintaan HTTP ke API backend Anda. API Gateway memvalidasi token atas nama API Anda, sehingga Anda tidak perlu menambahkan kode apa pun di API untuk memproses autentikasi. Namun, Anda perlu mengonfigurasi konfigurasi API untuk gateway agar mendukung metode autentikasi yang dipilih.
API Gateway memvalidasi JWT dengan cara yang berperforma tinggi menggunakan JSON Web Key Set (JWKS) penerbit JWT. Lokasi JWKS ditentukan di kolom x-google-jwks_uri
pada konfigurasi API gateway. API Gateway meng-cache JWKS selama lima
menit dan memuat ulang setiap lima menit.
Sebelum memulai
- Tambahkan kode autentikasi ke aplikasi klien Anda, dengan mengikuti dokumentasi autentikasi Firebase. Firebase mendukung autentikasi menggunakan sandi, nomor telepon, dan penyedia identitas gabungan yang populer seperti Google, Facebook, dan Twitter.
-
Saat aplikasi klien Anda mengirim permintaan HTTP, header otorisasi dalam
permintaan harus berisi klaim JWT berikut:
iss
(penerbit)sub
(subjek)aud
(audiens)iat
(diterbitkan pada)exp
(waktu habis masa berlaku)
-
Saat aplikasi klien Anda mengirim permintaan HTTP, header otorisasi dalam
permintaan harus berisi klaim JWT berikut:
Mengonfigurasi API Gateway untuk mendukung autentikasi klien
Anda harus memiliki objek persyaratan keamanan dan objek definisi keamanan di konfigurasi API agar API Gateway dapat memvalidasi klaim dalam JWT yang ditandatangani.
Untuk mendukung autentikasi Firebase:
Tambahkan hal berikut ke definisi keamanan di konfigurasi API Anda, yang mengikuti skema keamanan OpenAPI 2.0:
securityDefinitions: firebase: authorizationUrl: "" flow: "implicit" type: "oauth2" # Replace YOUR-PROJECT-ID with your project ID x-google-issuer: "https://securetoken.google.com/YOUR-PROJECT-ID" x-google-jwks_uri: "https://www.googleapis.com/service_accounts/v1/metadata/x509/securetoken@system.gserviceaccount.com" x-google-audiences: "YOUR-PROJECT-ID"
Tambahkan bagian keamanan di tingkat API untuk diterapkan ke seluruh API, atau di tingkat metode untuk diterapkan ke metode tertentu.
security: - firebase: []
Anda dapat menentukan beberapa definisi keamanan dalam konfigurasi API, tetapi setiap definisi harus memiliki penerbit yang berbeda. Jika Anda menggunakan bagian keamanan di API level dan di level metode, setelan level metode akan menggantikan setelan API level.
Melakukan panggilan yang diautentikasi ke API API Gateway
Saat mengirim permintaan menggunakan token autentikasi, sebaiknya
tempatkan token di header Authorization:Bearer
. Misalnya:
curl --request POST \ --header "Authorization: Bearer ${TOKEN}" \ "${GATEWAY_URL}/echo"
Di sini, GATEWAY_URL
dan TOKEN
adalah variabel lingkungan yang masing-masing berisi URL gateway dan token autentikasi yang di-deploy. Lihat
Membuat permintaan terautentikasi ke API Gateway API untuk mengetahui contoh kode yang mengirim permintaan menggunakan header Authorization:Bearer
.
Jika tidak dapat menggunakan header saat mengirim permintaan, Anda dapat menempatkan
token autentikasi dalam parameter kueri yang disebut access_token
. Contoh:
curl "${GATEWAY_URL}/echo?access_token=${TOKEN}"
Menerima hasil yang diautentikasi di API Anda
API Gateway biasanya meneruskan semua header yang diterimanya. Namun, header ini akan menggantikan header Authorization
asli saat alamat backend ditentukan oleh x-google-backend
dalam konfigurasi API.
API Gateway akan mengirimkan hasil autentikasi di X-Apigateway-Api-Userinfo
ke API backend. Sebaiknya gunakan header ini, bukan header
Authorization
asli. Header ini dienkode base64url
dan berisi
payload JWT.