Tetap teratur dengan koleksi
Simpan dan kategorikan konten berdasarkan preferensi Anda.
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=">
Error: BAD_FORMAT
Periksa hal-hal berikut:
Pastikan JWT berisi JSON yang valid.
Pastikan header JWT memiliki kolom "alg" dan disetel ke salah satu dari
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:
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".
Error: 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 untuk penerbit email, JWT diterbitkan sendiri.
Error: KEY_RETRIEVAL_ERROR
Pastikan URI kunci publik yang ditentukan dalam
jwksUri
dalam anotasi ApiIssuer sudah benar dan valid.
Error: Issuer not allowed
Pastikan klaim "iss" (penerbit) dalam token JWT Anda cocok dengan nilai
issuer
dalam anotasi ApiIssuer.
Error: Audience not allowed
Jika klaim "aud" (audiens) dalam token JWT cocok dengan
nama layanan Endpoints, Cloud Endpoints Framework akan memvalidasi
audiens dan mengabaikan nilai yang ditetapkan dalam elemen
audiences
dalam anotasi ApiIssuerAudience. Misalnya, jika nama layanan Anda
adalah "myservice.appspot.com", JWT dengan "aud" yang ditetapkan ke
"myservice.appspot.com" atau "https://myservice.appspot.com" adalah audiens
yang valid.
Jika klaim "aud" tidak sama dengan nama layanan Endpoints:
Pastikan klaim "aud" di JWT cocok dengan salah satu nilai dalam
elemen audiences dalam anotasi ApiIssuerAudience.
[[["Mudah dipahami","easyToUnderstand","thumb-up"],["Memecahkan masalah saya","solvedMyProblem","thumb-up"],["Lainnya","otherUp","thumb-up"]],[["Sulit dipahami","hardToUnderstand","thumb-down"],["Informasi atau kode contoh salah","incorrectInformationOrSampleCode","thumb-down"],["Informasi/contoh yang saya butuhkan tidak ada","missingTheInformationSamplesINeed","thumb-down"],["Masalah terjemahan","translationIssue","thumb-down"],["Lainnya","otherDown","thumb-down"]],["Terakhir diperbarui pada 2025-09-04 UTC."],[[["\u003cp\u003eThe Extensible Service Proxy (ESP) validates JSON Web Tokens (JWTs) before requests reach the API backend, and this document provides guidance for troubleshooting JWT validation failures.\u003c/p\u003e\n"],["\u003cp\u003eJWT validation errors such as \u003ccode\u003e401: Jwt issuer is not configured\u003c/code\u003e, \u003ccode\u003eBAD_FORMAT\u003c/code\u003e, \u003ccode\u003eTIME_CONSTRAINT_FAILURE\u003c/code\u003e, \u003ccode\u003eUNKNOWN\u003c/code\u003e, \u003ccode\u003eKEY_RETRIEVAL_ERROR\u003c/code\u003e, \u003ccode\u003eIssuer not allowed\u003c/code\u003e, and \u003ccode\u003eAudience not allowed\u003c/code\u003e can occur due to various configuration and format issues.\u003c/p\u003e\n"],["\u003cp\u003eEnsure that JWTs are correctly formatted with valid JSON, and have required fields such as \u003ccode\u003e"alg"\u003c/code\u003e, \u003ccode\u003e"iat"\u003c/code\u003e, \u003ccode\u003e"exp"\u003c/code\u003e, \u003ccode\u003e"nbf"\u003c/code\u003e, \u003ccode\u003e"sub"\u003c/code\u003e, \u003ccode\u003e"iss"\u003c/code\u003e, \u003ccode\u003e"jti"\u003c/code\u003e, and \u003ccode\u003e"aud"\u003c/code\u003e with the correct data types and values.\u003c/p\u003e\n"],["\u003cp\u003eVerify that time-related claims like \u003ccode\u003e"exp"\u003c/code\u003e and \u003ccode\u003e"nbf"\u003c/code\u003e are appropriately set for the current time, and use tools like jwt.io to decode and inspect the JWT's contents.\u003c/p\u003e\n"],["\u003cp\u003eProper configuration of the public key URI (\u003ccode\u003ejwksUri\u003c/code\u003e) and issuer (\u003ccode\u003eiss\u003c/code\u003e) are crucial to avoid errors such as \u003ccode\u003eKEY_RETRIEVAL_ERROR\u003c/code\u003e and \u003ccode\u003eIssuer not allowed\u003c/code\u003e, and the \u003ccode\u003eaud\u003c/code\u003e (audience) must match the service name or be within the allowed \u003ccode\u003eaudiences\u003c/code\u003e.\u003c/p\u003e\n"]]],[],null,["# Troubleshooting JWT validation\n\nWhen a client application includes a JSON Web Token (JWT) in a request to an\nAPI, the [Extensible Service Proxy (ESP)](/endpoints/docs/openapi/glossary#extensible_service_proxy)\nvalidates the JWT before sending the request to the API\nbackend. This page provides troubleshooting information if the JWT validation\nfails and ESP returns an error in the response to the client. See\n[RFC 7519](https://tools.ietf.org/html/rfc7519) for more information\nabout JWTs.\n**Error: `401: Jwt issuer is not configured`**\n\nThis may happen when deploying ESPv2 in Cloud Run, the flag\n`--allow-unauthenticated` is not used in `gcloud run deploy` command.\nIf the flag is not used, the JWT token is intercepted\nand verified by Cloud Run access control IAM server and not by ESPv2. IAM may use a different issuer than ESPv2.\n**Error: `BAD_FORMAT`**\n\nCheck the\nfollowing:\n\n- Make sure the JWT contains valid JSON.\n- Check that the JWT header has the `\"alg\"` field and is set to one of the following: `\"RS256\"`, `\"HS256\"`, `\"RS384\"`, `\"HS384\"`, `\"RS512\"`, or `\"HS512\"`\n- Check the data type of the following fields (if they are present) in the JWT payload:\n - The `\"iat\"` (issued at), `\"exp\"` (expiration time), and `\"nbf\"`(not before) claims are numbers greater than 0 and not strings.\n - The `\"sub\"` (subject), `\"iss\"` (issuer), and `\"jti\"` (JWT ID) fields are strings.\n - The `\"aud\"` (audience) claim is either a string or an array of strings.\n- Ensure that the following claims are present in the JWT payload: `\"sub\"` (subject), `\"iss\"` (issuer), and `\"aud\"` (audience).\n\nThe following is an example of a decoded JWT token that is valid: \n\n```\n{\n \"alg\": \"RS256\",\n \"typ\": \"JWT\",\n \"kid\": \"42ba1e234ac91ffca687a5b5b3d0ca2d7ce0fc0a\"\n}\n\nPayload:\n{\n \"iss\": \"myservice@myproject.iam.gserviceaccount.com\",\n \"iat\": 1493833746,\n \"aud\": \"myservice.appspot.com\",\n \"exp\": 1493837346,\n \"sub\": \"myservice@myproject.iam.gserviceaccount.com\"\n}\n```\n**Error: `TIME_CONSTRAINT_FAILURE`**\n\nUse [jwt.io](https://jwt.io/) to decode the JWT and make sure that:\n\n- The `\"exp\"` (expiration time) claim exists.\n- The `\"exp\"` (expiration time) claim value is a date and time in the future. The current date and time must be before the expiration date and time listed in the `\"exp\"` claim.\n- The `\"nbf\"` (not before) claim (If present) is a date and time in the past. The current date and time must be after or equal to the date and time listed in the `\"nbf\"` claim.\n\n**Error: `UNKNOWN`**\n\nUse [jwt.io](https://jwt.io/) to decode the JWT and ensure that:\n\n- If the `\"iss\"` (issuer) claim is an email address, then the `\"sub\"` (subject) and `\"iss\"` claims should be the same. This is to ensure that for e-mail issuers, the JWT is self issued.\n\n**Error: `KEY_RETRIEVAL_ERROR`**\n\n- Check that the public key URI specified in the [`jwksUri`](/endpoints/docs/frameworks/java/javadoc/com/google/api/server/spi/config/ApiIssuer) in the `ApiIssuer` annotation is correct and valid.\n\n**Error: `Issuer not allowed`**\n\n- Check that the `\"iss\"` (issuer) claim in your JWT token matches the [`issuer`](/endpoints/docs/frameworks/java/javadoc/com/google/api/server/spi/config/ApiIssuer) value in the `ApiIssuer` annotation.\n\n**Error: `Audience not allowed`**\n\nIf the `\"aud\"` (audience) claim in a JWT token matches the\nEndpoints service name, then Cloud Endpoints Frameworks validates\nthe audience and ignores the values set in the\n[`audiences`](/endpoints/docs/frameworks/java/javadoc/com/google/api/server/spi/config/ApiIssuerAudience)\nelement in the `ApiIssuerAudience` annotation. For example, if your service name\nis `\"myservice.appspot.com\"`, then a JWT with `\"aud\"` set to\n`\"myservice.appspot.com\"` or `\"https://myservice.appspot.com\"` is a valid\naudience.\n\nIf the `\"aud\"` claim isn't the same as the Endpoints service\nname:\n\n- Check that the `\"aud\"` claim in the JWT matches one of the values in the `audiences` element in the `ApiIssuerAudience` annotation."]]