Menggunakan Auth0 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 Auth0.
-
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)
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 Auth0:
Tambahkan hal berikut ke definisi keamanan di konfigurasi API Anda, yang mengikuti skema keamanan OpenAPI 2.0:
securityDefinitions: auth0_jwk: authorizationUrl: "" flow: "implicit" type: "oauth2" # Replace YOUR-ACCOUNT-NAME with your Auth0 account name. x-google-issuer: "https://YOUR-ACCOUNT-NAME.auth0.com/" x-google-jwks_uri: "https://YOUR-ACCOUNT-NAME.auth0.com/.well-known/jwks.json" # Optional. Replace YOUR-CLIENT-ID with your client ID x-google-audiences: "YOUR-CLIENT-ID"
Tambahkan bagian keamanan di tingkat API untuk diterapkan ke seluruh API, atau di tingkat metode untuk diterapkan ke metode tertentu.
security: - auth0_jwk: []
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.
Kolom x-google-audiences
tidak wajib diisi. API Gateway menerima semua JWT dengan nama layanan backend dalam bentuk https://SERVICE_NAME
dalam klaim aud
.
Untuk mengizinkan client ID tambahan mengakses layanan backend, Anda dapat menentukan client ID yang diizinkan di kolom x-google-audiences
menggunakan nilai yang dipisahkan koma. API Gateway kemudian menerima JWT dengan salah satu
ID klien yang ditentukan dalam klaim aud
.
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.