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
- Comprueba que el URI de la clave pública especificado en el segundo parámetro del objeto
endpoints.Issuer
sea correcto y válido.
Error: Issuer not allowed
- Comprueba que la reclamación
"iss"
(entidad emisora) en tu token JWT coincida con el primer parámetro del objetoendpoints.Issuer
.
Error: Audience not allowed
Si la reclamación "aud"
(público) en un token JWT coincide con el nombre de servicio de Endpoints, Cloud Endpoints Frameworks valida al público a la vez que ignora los valores configurados en el argumento audiences
en el decorador @endpoints.api
. 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 igual al nombre de servicio Endpoints, haz lo siguiente:
- Comprueba que la reclamación
"aud"
en el JWT coincida con uno de los valores en el argumentoaudiences
en el decorador@endpoints.api
.