Halaman ini menjelaskan cara mendukung autentikasi pengguna di Cloud Endpoints.
Untuk mengautentikasi pengguna, aplikasi klien harus mengirimkan Token Web JSON (JWT) di header otorisasi permintaan HTTP ke API backend Anda. Extensible Service Proxy (ESP) memvalidasi token atas nama API Anda, sehingga Anda tidak perlu menambahkan kode apa pun di API untuk memproses autentikasi. Namun, Anda perlu mengonfigurasi dokumen OpenAPI untuk mendukung metode autentikasi yang dipilih.
ESP memvalidasi JWT dengan cara yang berperforma tinggi menggunakan kunci publik penerbit JWT. ESP menyimpan kunci publik dalam cache selama lima menit. Selain itu, ESP meng-cache JWT yang divalidasi selama lima menit atau hingga JWT berakhir masa berlakunya, mana saja yang terjadi terlebih dahulu.
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 ESP untuk mendukung autentikasi klien
Anda harus memiliki objek persyaratan keamanan dan objek definisi keamanan dalam dokumen OpenAPI agar ESP dapat memvalidasi klaim dalam JWT yang ditandatangani.
Untuk mendukung autentikasi Auth0:
Tambahkan hal berikut ke definisi keamanan dalam dokumen OpenAPI Anda:
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 dokumen OpenAPI, 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. ESP
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. ESP kemudian menerima JWT dengan salah satu
client ID yang ditentukan dalam klaim aud
.
Anda juga dapat menyesuaikan lokasi JWT dengan menambahkan x-google-extensions
. Untuk mengetahui detailnya, lihat ekstensi openAPI.
Melakukan panggilan yang diautentikasi ke Endpoints API
Saat Anda mengirim permintaan menggunakan token autentikasi, demi keamanan, sebaiknya
tempatkan token di header Authorization:Bearer
. Misalnya:
curl -H "Authorization: Bearer ${TOKEN}" "${ENDPOINTS_HOST}/echo"
Di sini, ENDPOINTS_HOST
dan TOKEN
adalah variabel lingkungan yang masing-masing berisi nama host API dan token autentikasi Anda. Lihat
Membuat permintaan yang diautentikasi ke Endpoints 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 "${ENDPOINTS_HOST}/echo?access_token=${TOKEN}"
Menerima hasil yang diautentikasi di API Anda
ESP biasanya meneruskan semua header yang diterimanya. Namun, header ini akan mengganti header Authorization
asli saat alamat backend ditentukan oleh x-google-backend
dalam spesifikasi OpenAPI atau BackendRule
dalam konfigurasi layanan gRPC.
ESP akan mengirimkan hasil autentikasi di X-Endpoint-API-UserInfo
ke API backend. Sebaiknya gunakan header ini, bukan header
Authorization
asli. Header ini adalah string yang dienkode oleh base64url
objek JSON. Format objek JSON berbeda antara ESPv2 dan ESP.
Untuk ESPv2, objek JSON sama persis dengan payload JWT asli. Untuk ESP, objek JSON menggunakan nama kolom yang berbeda dan menempatkan payload JWT asli di kolom claims
.
Lihat Menangani JWT di layanan backend
untuk mengetahui informasi selengkapnya tentang formatnya.
Sampel
Langkah selanjutnya