Estás consultando la documentación de Apigee y Apigee Hybrid.
Consulta la documentación de
Apigee Edge.
FailedToDecode
Código de error
steps.jwt.FailedToDecode
Cuerpo de respuesta de error
{
"fault": {
"faultstring": "Failed to Decode Token: policy({0})",
"detail": {
"errorcode": "steps.jwt.FailedToDecode"
}
}
}
Causa
Este error se produce si el JSON Web Token (JWT) especificado en el elemento <Source>
de la política Decode JWT tiene un formato incorrecto, no es válido o no se puede decodificar.
Un JWT correctamente estructurado debe contener un encabezado, una carga útil y una firma con el siguiente formato: header.payload.signature
. Si falta alguna parte del componente del JWT que se ha enviado a la política DecodeJWT, se producirá un error. Por ejemplo, si el JWT solo tiene payload.signature
, pero le falta header
, se producirá un error.
Diagnóstico
Identifica la variable especificada en el elemento
<Source>
de la política Decodificar JWT. Esta variable debe contener el JWT.A continuación, se muestra un ejemplo de política de decodificación de JWT:
<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 estar incluido en el encabezado de la solicitud de autorización.
Examina la variable identificada en el paso 1 y comprueba si el JWT que contiene es válido. Si el JWT de entrada no es válido, ese es el motivo del error.
En la solicitud de API de ejemplo que se muestra a continuación, el JWT de entrada se transfiere en el encabezado de solicitud Authorization:
curl -v "http://$EXTERNAL_IP/v1/decodeJWT" -H "Authorization: Bearer eyJ1c2VySWQiOiJiMDhmODZhZi0zNWRhLTQ4ZjItOGZhYi1jZWYzOTA0NjYwYmQifQ.-xN_h82PHVTCMA9vdoHrcZxH-x5mb11y1537t3rGzcM"
Donde
$EXTERNAL_IP
es la dirección IP del balanceador de carga externo. Esta dirección IP está expuesta a Internet. Para obtener más información, consulta Personalizar el enrutamiento de acceso.Si examinas detenidamente el JWT, verás que tiene el formato
payload.signature
, que no es válido. El formato esperado del JWT esheader.payload.signature
. Por lo tanto, la política Decodificar JWT falla y devuelve el siguiente error :"faultstring": "Failed to Decode Token: policy({0})"
Resolución
Asegúrate de que el JWT que se ha enviado a la política Decodificar JWT contenga los tres elementos, tenga el formato correcto y se pueda decodificar.
Para corregir el ejemplo que se muestra arriba, puedes enviar un JWT válido con el formato header.payload.signature
. Para ello, haga la llamada a la API con el comando cURL de la siguiente manera:
curl -v "http://$EXTERNAL_IP/v1/decodeJWT" -H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VySWQiOiJiMDhmODZhZi0zNWRhLTQ4ZjItOGZhYi1jZWYzOTA0NjYwYmQifQ.-xN_h82PHVTCMA9vdoHrcZxH-x5mb11y1537t3rGzcM"
Donde $EXTERNAL_IP
es la dirección IP del balanceador de carga externo.
Esta dirección IP está expuesta a Internet. Para obtener más información, consulta Personalizar el enrutamiento de acceso.
InvalidToken
Código de error
steps.jwt.InvalidToken
Cuerpo de respuesta de 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:
- Fuera del ámbito (no disponible en el flujo específico en el que se está ejecutando la política) o
- no se puede resolver (no está definido)
Diagnóstico
Identifica la variable especificada en el elemento
<Source>
de la política Decodificar JWT. Esta variable debe contener el JWT.A continuación, se muestra un ejemplo de política de decodificación de JWT:
<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 Decodificar JWT.
Si la variable es:
- Fuera del ámbito (no disponible en el flujo específico en el que se está ejecutando la política) o
- no se puede resolver (no está definido)
entonces, esa es la causa del error.
En la solicitud de API de ejemplo que se muestra a continuación, el usuario no incluye el JWT en el encabezado de la solicitud de autorización.
curl -v "http://$EXTERNAL_IP/v1/decodeJWT"
Donde $EXTERNAL_IP
es la dirección IP del balanceador de carga externo.
Esta dirección IP está expuesta a Internet. Para obtener más información, consulta Personalizar el enrutamiento de acceso.
Because the authorization request header is not passed, the Decode JWT policy fails with the error:
```
"faultstring": "Invalid token: policy({0})"
```
Resolució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 (decodificable) y esté disponible en el flujo específico en el que se esté ejecutando la política Decodificar JWT.
Para corregir el ejemplo anterior, puedes enviar un JWT válido en el encabezado de autorización de la solicitud. Para ello, haga la llamada a la API con el comando cURL de la siguiente manera:
curl -v "http://$EXTERNAL_IP/v1/decodeJWT" -H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VySWQiOiJiMDhmODZhZi0zNWRhLTQ4ZjItOGZhYi1jZWYzOTA0NjYwYmQifQ.-xN_h82PHVTCMA9vdoHrcZxH-x5mb11y1537t3rGzcM"
Donde $EXTERNAL_IP
es la dirección IP del balanceador de carga externo.
Esta dirección IP está expuesta a Internet. Para obtener más información, consulta Personalizar el enrutamiento de acceso.