Estás viendo la documentación de Apigee Edge.
Ve a la
documentación de Apigee X. info
FailedToDecode
Código de error
steps.jwt.FailedToDecode
Cuerpo de la respuesta del error
{
"fault": {
"faultstring": "Failed to Decode Token: policy({0})",
"detail": {
"errorcode": "steps.jwt.FailedToDecode"
}
}
}
Causa
Este error se produce si el token web JSON (JWT) especificado en el elemento <Source>
de la política Decodificar JWT tiene errores de formato, no es válido o no se puede decodificar.
Un JWT estructurado correctamente debe contener un encabezado, una carga útil y una firma en el siguiente formato: header.payload.signature
. Si al JWT que se pasó a la política DecodeJWT le falta una parte del componente, aparecerá el error. Por ejemplo, si el JWT solo tiene payload.signature
, pero le falta su header
, se producirá el error.
Diagnóstico
Identifica la variable especificada en el elemento
<Source>
de la política de decodificación de JWT. Esta variable debe contener el JWT.A continuación, se muestra una política Decodificar JWT de muestra:
<DecodeJWT name="JWT-Decode-HS256"> <DisplayName>JWT Verify HS256</DisplayName> <Source>request.header.authorization</Source> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> </DecodeJWT>
En el ejemplo anterior, el JWT debe incluirse en el encabezado de la solicitud de autorización.
Examina la variable identificada en el Paso 1 y verifica si el JWT que contiene es válido. Si el JWT de entrada no es válido, esa es la causa del error.
En la siguiente solicitud a la API de ejemplo, el JWT de entrada se pasa en el encabezado de la solicitud de autorización:
curl -v "http://<org>-<env>.apigee.net/v1/decodeJWT" -H "Authorization: Bearer eyJ1c2VySWQiOiJiMDhmODZhZi0zNWRhLTQ4ZjItOGZhYi1jZWYzOTA0NjYwYmQifQ.-xN_h82PHVTCMA9vdoHrcZxH-x5mb11y1537t3rGzcM"
Los análisis posteriores del JWT muestran que tiene el formato no válido
payload.signature
. El formato esperado del JWT esheader.payload.signature
. Como resultado, la política de decodificación de JWT falla con el error:"faultstring": "Failed to Decode Token: policy({0})"
Solución
Asegúrate de que el JWT transmitido a la política Decodificar JWT contenga los tres elementos, tenga el formato correcto y que se pueda decodificar.
Para corregir el ejemplo que se muestra arriba, puedes pasar un JWT válido con el formato header.payload.signature
. Para ello, haz la llamada a la API con el comando cURL de la siguiente manera:
curl -v "http://<org>-<env>.apigee.net/v1/decodeJWT" -H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VySWQiOiJiMDhmODZhZi0zNWRhLTQ4ZjItOGZhYi1jZWYzOTA0NjYwYmQifQ.-xN_h82PHVTCMA9vdoHrcZxH-x5mb11y1537t3rGzcM"
InvalidToken
Código de error
steps.jwt.InvalidToken
Cuerpo de la respuesta del error
{
"fault": {
"faultstring": "Invalid token: policy({0})",
"detail": {
"errorcode": "steps.jwt.InvalidToken"
}
}
}
Causa
Este error se produce si la variable de flujo especificada en el elemento <Source>
de la política Decodificar JWT es la siguiente:
- fuera de alcance (no disponible en el flujo específico en el que se ejecuta la política)
- no se puede resolver (no está definido)
Diagnóstico
Identifica la variable especificada en el elemento
<Source>
de la política de decodificación de JWT. Esta variable debe contener el JWT.A continuación, se muestra una política Decodificar JWT de muestra:
<DecodeJWT name="JWT-Decode-HS256"> <DisplayName>JWT Verify HS256</DisplayName> <Source>request.header.authorization</Source> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> </DecodeJWT>
En el ejemplo anterior, el encabezado de la solicitud de autorización debe contener el JWT.
Determina si la variable identificada en el Paso 1 está definida y disponible en el flujo en el que se ejecuta la política de decodificación de JWT.
Verifica si la variable tiene una de las siguientes características:
- fuera de alcance (no disponible en el flujo específico en el que se ejecuta la política) o
- no se puede resolver (no está definido)
entonces esa es la causa del error.
En la siguiente solicitud de API de ejemplo, el usuario no pasa el JWT en el encabezado de la solicitud de autorización.
curl -v "http://<org>-<env>.apigee.net/v1/decodeJWT"
Debido a que no se pasa el encabezado de solicitud de autorización, la política de DecodeJWT falla con el siguiente error:
"faultstring": "Invalid token: policy({0})"
Solución
Asegúrate de que la variable a la que se hace referencia en el elemento <Source>
de la política Decodificar JWT esté definida, contenga un JWT válido (que se pueda decodificar) y que esté disponible en el flujo específico en el que se ejecuta la política Decodificar JWT.
Para corregir el ejemplo que aparece arriba, puedes pasar un JWT válido en el encabezado de autorización de la solicitud. Para ello, haz la llamada a la API con el comando cURL de la siguiente manera:
curl -v "http://<org>-<env>.apigee.net/v1/decodeJWT" -H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VySWQiOiJiMDhmODZhZi0zNWRhLTQ4ZjItOGZhYi1jZWYzOTA0NjYwYmQifQ.-xN_h82PHVTCMA9vdoHrcZxH-x5mb11y1537t3rGzcM"