Cuando una aplicación cliente incluye un JSON Web Token (JWT) en una solicitud a una API, el Extensible Service Proxy (ESP) valida el JWT antes de enviar la solicitud al backend de la API. En esta página se proporciona información para solucionar problemas si la validación de JWT falla y ESP devuelve un error en la respuesta al cliente. Consulta RFC 7519 para obtener más información sobre los JWTs.
Error:401: Jwt issuer is not configured
Esto puede ocurrir al desplegar ESPv2 en Cloud Run si no se usa la marca --allow-unauthenticated
en el comando gcloud run deploy
.
Si no se usa la marca, Cloud Run intercepta y verifica el token JWT mediante el servidor IAM de <a=" docs="" managing-access"="" run="" securing="">control de acceso</a>, no mediante ESPv2. IAM puede usar una entidad emisora diferente a ESPv2.
</a=">
BAD_FORMAT
Comprueba lo siguiente:
- Asegúrate de que el JWT contenga un JSON válido.
- Comprueba que el encabezado JWT tenga el campo
"alg"
y que esté definido como uno de los siguientes valores:"RS256"
,"HS256"
,"RS384"
,"HS384"
,"RS512"
o"HS512"
. - Comprueba el tipo de datos de los siguientes campos (si están presentes) en la carga útil del JWT:
- Las reclamaciones
"iat"
(emitida a las),"exp"
(hora de vencimiento) y"nbf"
(no antes de) son números mayores que 0 y no cadenas. - Los campos
"sub"
(asunto),"iss"
(emisor) y"jti"
(ID de JWT) son cadenas. - La reclamación
"aud"
(audiencia) es una cadena o un array de cadenas. - Asegúrate de que la carga útil del JWT incluya las siguientes reclamaciones:
"sub"
(sujeto),"iss"
(emisor) y"aud"
(audiencia).
A continuación, se muestra un ejemplo de token JWT decodificado que es válido:
{ "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
Usa jwt.io para decodificar el JWT y asegúrate de que:
- Existe la reclamación
"exp"
(hora de vencimiento). - El valor de la reclamación
"exp"
(tiempo de vencimiento) es una fecha y una hora futuras. La fecha y la hora actuales deben ser anteriores a la fecha y la hora de vencimiento que se indican en la reclamación"exp"
. - La reclamación
"nbf"
(no anterior) (si está presente) es una fecha y una hora del pasado. La fecha y la hora actuales deben ser posteriores o iguales a las que se indican en la reclamación de"nbf"
.
UNKNOWN
Usa jwt.io para decodificar el JWT y asegúrate de que:
- Si la reclamación
"iss"
(emisor) es una dirección de correo electrónico, las reclamaciones"sub"
(sujeto) y"iss"
deben ser las mismas. De esta forma, se asegura que el JWT se emita automáticamente para los emisores de correo electrónico.
Error: KEY_RETRIEVAL_ERROR
- Comprueba que el URI de la clave pública especificado en el campo
x-google-jwks_uri
de tu documento OpenAPI sea correcto y válido.
Error: Issuer not allowed
Comprueba que la reclamación
"iss"
(emisor) de tu token JWT coincida con el campox-google-issuer
de la secciónsecurityDefinitions
del objeto de seguridad de tu documento OpenAPI.En tu documento de OpenAPI, comprueba que el objeto de seguridad esté habilitado para el método de la API invocado.
Consulta el archivo openapi.yaml de ejemplo para ver un ejemplo de cómo describir la seguridad a nivel de método mediante los objetos securityDefinition
y security
.
Error: Audience not allowed
Compara la reclamación "aud"
(audiencia) de un token JWT para ver si coincide con el nombre del servicio de Endpoints, que corresponde al campo host
del documento OpenAPI.
Si la reclamación "aud"
y el nombre del servicio Endpoints son diferentes:
Comprueba que la reclamación
"aud"
del JWT coincida con uno de los valoresx-google-audiences
especificados en tu documento de OpenAPI.Asegúrate de que
x-google-audiences
yx-google-issuer
estén en el mismo objetosecurityDefinitions
de tu documento OpenAPI.
Si la reclamación "aud"
y el nombre del servicio Endpoints son los mismos, el ESP valida la audiencia e ignora los valores de x-google-audiences
de tu documento OpenAPI. Por ejemplo, si el nombre de tu servicio es "myservice.endpoints.example-project-12345.cloud.goog"
, un JWT con "aud"
definido como "myservice.endpoints.example-project-12345.cloud.goog"
o "https://myservice.endpoints.example-project-12345.cloud.goog"
es una audiencia válida.