Saat aplikasi klien menyertakan Token Web JSON (JWT) dalam permintaan ke API, Extensible Service Proxy (ESP) akan memvalidasi JWT sebelum mengirim permintaan ke backend API. Halaman ini memberikan informasi pemecahan masalah jika validasi JWT gagal dan ESP menampilkan error dalam respons ke klien. Lihat RFC 7519 untuk mengetahui informasi selengkapnya tentang JWT.
Error:401: Jwt issuer is not configured
Hal ini dapat terjadi saat men-deploy ESPv2 di Cloud Run, flag
--allow-unauthenticated
tidak digunakan dalam perintah gcloud run deploy
.
Jika tanda ini tidak digunakan, token JWT akan dicegat
dan diverifikasi oleh Cloud Run <a=" docs="" managing-access"="" run="" securing="">server IAM kontrol akses, bukan oleh ESPv2. IAM dapat menggunakan penerbit yang berbeda dengan
ESPv2.
</a=">
BAD_FORMAT
Periksa hal-hal berikut:
- Pastikan JWT berisi JSON yang valid.
- Pastikan header JWT memiliki kolom
"alg"
dan disetel ke salah satu berikut:"RS256"
,"HS256"
,"RS384"
,"HS384"
,"RS512"
, atau"HS512"
- Periksa jenis data kolom berikut (jika ada) dalam payload JWT:
- Klaim
"iat"
(issued at),"exp"
(expiration time), dan"nbf"
(not before) adalah angka yang lebih besar dari 0, bukan string. - Kolom
"sub"
(subjek),"iss"
(penerbit), dan"jti"
(ID JWT) adalah string. - Klaim
"aud"
(audiens) adalah string atau array string. - Pastikan klaim berikut ada dalam payload JWT:
"sub"
(subjek),"iss"
(penerbit), dan"aud"
(audiens).
Berikut adalah contoh token JWT yang didekode dan valid:
{ "alg": "RS256", "typ": "JWT", "kid": "42ba1e234ac91ffca687a5b5b3d0ca2d7ce0fc0a" } Payload: { "iss": "myservice@myproject.iam.gserviceaccount.com", "iat": 1493833746, "aud": "myservice.appspot.com", "exp": 1493837346, "sub": "myservice@myproject.iam.gserviceaccount.com" }
TIME_CONSTRAINT_FAILURE
Gunakan jwt.io untuk mendekode JWT dan pastikan bahwa:
- Klaim
"exp"
(waktu habis masa berlaku) sudah ada. - Nilai klaim
"exp"
(waktu habis masa berlaku) adalah tanggal dan waktu di masa mendatang. Tanggal dan waktu saat ini harus sebelum tanggal dan waktu habis masa berlaku yang tercantum dalam klaim"exp"
. - Klaim
"nbf"
(not before) (Jika ada) adalah tanggal dan waktu di masa lalu. Tanggal dan waktu saat ini harus setelah atau sama dengan tanggal dan waktu yang tercantum dalam klaim"nbf"
.
UNKNOWN
Gunakan jwt.io untuk mendekode JWT dan memastikan bahwa:
- Jika klaim
"iss"
(penerbit) adalah alamat email, klaim"sub"
(subjek) dan"iss"
harus sama. Hal ini untuk memastikan bahwa bagi penerbit email, JWT diterbitkan sendiri.
Error: KEY_RETRIEVAL_ERROR
- Pastikan URI kunci publik yang ditentukan di kolom
x-google-jwks_uri
dalam dokumen OpenAPI Anda sudah benar dan valid.
Error: Issuer not allowed
Pastikan klaim
"iss"
(penerbit) di token JWT Anda cocok dengan kolomx-google-issuer
di bagiansecurityDefinitions
objek keamanan dalam dokumen OpenAPI Anda.Dalam dokumen OpenAPI, pastikan objek keamanan diaktifkan untuk metode API yang dipanggil.
Lihat file
contoh openapi.yaml
untuk mengetahui contoh cara mendeskripsikan keamanan di tingkat metode menggunakan
objek securityDefinition
dan security
.
Error: Audience not allowed
Bandingkan klaim "aud"
(audiens) dalam token JWT untuk melihat apakah klaim tersebut cocok dengan nama layanan Endpoints, yang sesuai dengan kolom host
dalam dokumen OpenAPI.
Jika klaim "aud"
dan nama layanan Endpoints berbeda:
Pastikan klaim
"aud"
dalam JWT cocok dengan salah satu nilaix-google-audiences
yang ditentukan dalam dokumen OpenAPI Anda.Pastikan
x-google-audiences
danx-google-issuer
berada dalam objeksecurityDefinitions
yang sama dalam dokumen OpenAPI Anda.
Jika klaim "aud"
dan nama layanan Endpoints sama,
ESP akan memvalidasi audiens dan
mengabaikan nilai
x-google-audiences
dalam dokumen OpenAPI Anda. Misalnya, jika nama layanan Anda
adalah "myservice.endpoints.example-project-12345.cloud.goog"
, JWT dengan
"aud"
yang ditetapkan ke "myservice.endpoints.example-project-12345.cloud.goog"
atau
"https://myservice.endpoints.example-project-12345.cloud.goog"
adalah audiens
yang valid.