Decodifica la solución de problemas del error del entorno de ejecución de JWT

Estás consultando la documentación de Apigee Edge.
Consulta la documentación de Apigee X.
Información

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

  1. 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.

  2. 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 es header.payload.signature. Como resultado, la política de decodificación de JWT falla con el error:

    "faultstring": "Failed to Decode Token: policy({0})"
    

Resolució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

  1. 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.

  2. 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.

  3. 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 la solicitud de autorización, la política Decode JWT falla con el siguiente 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 (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"