Menggunakan Firebase untuk mengautentikasi pengguna
Halaman ini menjelaskan cara mendukung autentikasi pengguna di API Gateway.
Untuk mengautentikasi pengguna, aplikasi klien harus mengirim Token Web JSON (JWT) di header otorisasi permintaan HTTP ke backend API 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 Anda agar mendukung metode autentikasi yang dipilih.
API Gateway memvalidasi JWT secara berperforma tinggi dengan menggunakan JSON Web Key Set (JWKS) penerbit JWT. Lokasi JWKS ditentukan dalam konfigurasi API gateway. API Gateway menyimpan JWKS dalam cache selama lima menit dan memperbaruinya setiap lima menit.
Sebelum memulai
- Tambahkan kode autentikasi ke aplikasi klien Anda dengan mengikuti dokumentasi Firebase Authentication. Firebase mendukung autentikasi menggunakan sandi, nomor telepon, dan penyedia identitas gabungan 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(dikeluarkan di)exp(waktu habis masa berlaku)
Mengonfigurasi API Gateway untuk mendukung autentikasi klien
Anda harus memiliki bagian keamanan dalam konfigurasi API agar API Gateway dapat memvalidasi klaim dalam JWT yang ditandatangani. Skema yang digunakan untuk menentukan metode keamanan bergantung pada versi spesifikasi OpenAPI yang Anda gunakan.
Untuk mendukung Firebase Authentication:
OpenAPI 2.0
- Tambahkan kode berikut ke konfigurasi API Anda:
securityDefinitions: firebase: authorizationUrl: "" flow: "implicit" type: "oauth2" # Replace PROJECT_ID with your project ID x-google-issuer: "https://securetoken.google.com/PROJECT_ID" x-google-jwks_uri: "https://www.googleapis.com/service_accounts/v1/metadata/x509/securetoken@system.gserviceaccount.com" x-google-audiences: "PROJECT_ID"
- Tambahkan bagian keamanan di tingkat API untuk diterapkan ke seluruh API, atau di tingkat metode untuk diterapkan ke metode tertentu.
security: - firebase: []
OpenAPI 3.x
- Tambahkan kode berikut ke konfigurasi API Anda:
components: securitySchemes: firebase: type: oauth2 flows: implicit: authorizationUrl: "" scopes: {} x-google-auth: # Replace PROJECT_ID with your project ID issuer: https://securetoken.google.com/PROJECT_ID jwksUri: https://www.googleapis.com/service_accounts/v1/metadata/x509/securetoken@system.gserviceaccount.com audiences: - 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 tingkat API dan tingkat metode, setelan tingkat metode akan menggantikan setelan tingkat API.
Melakukan panggilan terautentikasi ke API Gateway API
Saat Anda mengirim permintaan menggunakan token autentikasi, sebaiknya Anda menempatkan token di header Authorization:Bearer. Misalnya:
curl -H "Authorization: Bearer TOKEN" "GATEWAY_URL/hello"
Di sini, GATEWAY_URL dan TOKEN harus diganti dengan URL gateway yang di-deploy dan token autentikasi Anda. Lihat
Membuat permintaan yang diautentikasi ke API Gateway API untuk 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/hello?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 jika 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.