Cuando una aplicación cliente incluye un token web JSON (JWT) en una solicitud a una API, el proxy de servicio extensible (ESP) valida el JWT antes de enviar la solicitud al backend de la API. En esta página, se proporciona información para la solución de problemas si falla la validación de JWT y el ESP muestra un error en la respuesta al cliente. Consulta RFC 7519 para obtener más información sobre los JWT.
Error:401: Jwt issuer is not configured
Esto puede ocurrir cuando, durante la implementación del ESPv2 en Cloud Run, la marca --allow-unauthenticated
no se usa en el comando gcloud run deploy
.
Si no se usa la marca, el token JWT se intercepta y verifica mediante el servidor de IAM de <a=" docs="" managing-access"="" run="" securing="">control de acceso de Cloud Run, y no mediante el ESPv2. IAM puede un emisor diferente del ESPv2.
</a=">
BAD_FORMAT
Verifica lo siguiente:
- Asegúrate de que el JWT contenga un JSON válido.
- Comprueba que el encabezado JWT tenga el campo
"alg"
y que se configure como una de las siguientes opciones:"RS256"
,"HS256"
,"RS384"
,"HS384"
,"RS512"
o"HS512"
- Comprueba el tipo de datos en los siguientes campos (si están presentes) de la carga útil del JWT:
- Las reclamaciones
"iat"
(emitido en),"exp"
(tiempo de vencimiento) y"nbf"
(no antes) son números mayores que 0 y no son strings. - Los campos
"sub"
(sujeto),"iss"
(emisor) y"jti"
(ID de JWT) son strings. - La reclamación
"aud"
(público) es una string o un arreglo de strings. - Asegúrate de que las siguientes reclamaciones estén presentes en la carga útil del JWT:
"sub"
(asunto),"iss"
(emisor) y"aud"
(público).
El siguiente fragmento es un ejemplo de un 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
Utiliza jwt.io para decodificar el JWT y asegurarte de que:
- La reclamación
"exp"
(tiempo de vencimiento) existe. - El valor de la reclamación
"exp"
(tiempo de vencimiento) es una fecha y hora en el futuro. La fecha y la hora actuales deben ser anteriores a la fecha y hora de vencimiento indicadas en la reclamación"exp"
. - La reclamación
"nbf"
(no antes), si está presente, es una fecha y hora en el pasado. La fecha y hora actuales deben ser posteriores o iguales a la fecha y hora enumeradas en la reclamación"nbf"
.
UNKNOWN
Utiliza jwt.io para decodificar el JWT y garantizar que:
- Si la reclamación
"iss"
(emisor) es una dirección de correo electrónico, entonces las reclamaciones"sub"
(asunto) y"iss"
deben ser las mismas. Esto es para garantizar que el JWT se emita de forma automática a los emisores con correo electrónico.
Error: KEY_RETRIEVAL_ERROR
- Verifica que el URI de clave pública especificado en
jwksUri
en la anotaciónApiIssuer
sea correcto y válido.
Error: Issuer not allowed
- Verifica que la reclamación
"iss"
(emisor) en tu token JWT coincida con el valorissuer
en la anotaciónApiIssuer
.
Error: Audience not allowed
Si la reclamación "aud"
(público) en un token JWT coincide con el nombre del servicio de Endpoints, Cloud Endpoints Frameworks valida al público a la vez que ignora los valores configurados en el elemento audiences
en la anotación ApiIssuerAudience
. Por ejemplo, si el nombre del servicio es "myservice.appspot.com"
, un JWT con "aud"
configurado como "myservice.appspot.com"
o "https://myservice.appspot.com"
es un público válido.
Si la reclamación "aud"
no es la misma que el nombre del servicio de Endpoints, haz lo siguiente:
- Verifica que la reclamación
"aud"
en el JWT coincida con uno de los valores del elementoaudiences
en la anotaciónApiIssuerAudience
.