Política DecodeJWT

Esta página se aplica a Apigee y Apigee Hybrid.

Consulta la documentación de Apigee Edge.

Icono de política

Qué

Decodifica un JWT sin verificar la firma del JWT. Esta opción es muy útil cuando se usa junto con la política VerifyJWT, cuando se debe conocer el valor de una reclamación del JWT antes de verificar la firma del JWT.

La política Decodificación de JWT funciona independientemente del algoritmo que se haya usado para firmar el JWT. Consulta la información general sobre las políticas de JWS y JWT para obtener una introducción detallada.

Esta política es una política estándar y se puede implementar en cualquier tipo de entorno. Para obtener información sobre los tipos de políticas y la disponibilidad de cada tipo de entorno, consulta Tipos de políticas.

Vídeo

Vea un breve vídeo para aprender a decodificar un JWT.

Ejemplo: decodificar un JWT

La política que se muestra a continuación decodifica un JWT que se encuentra en la variable de flujo var.jwt. Esta variable debe estar presente y contener un JWT viable (decodificable). La política puede obtener el JWT de cualquier variable de flujo.

<DecodeJWT name="JWT-Decode-HS256">
    <DisplayName>JWT Verify HS256</DisplayName>
    <Source>var.jwt</Source>
</DecodeJWT>

La política escribe su salida en variables de contexto para que las políticas o condiciones posteriores del proxy de API puedan examinar esos valores. Consulta Variables de flujo para ver una lista de las variables definidas por esta política.

Referencia de elemento de Decodificar JWT

En la referencia de la política se describen los elementos y atributos de la política Decodificar JWT.

Atributos que se aplican al elemento de nivel superior

<DecodeJWT name="JWT" continueOnError="false" enabled="true" async="false">

Los siguientes atributos son comunes a todos los elementos principales de la política.

Atributo Descripción Predeterminado Presencia
name El nombre interno de la política. Solo puedes usar los siguientes caracteres en el nombre: A-Z0-9._\-$ %. Sin embargo, la interfaz de usuario de Apigee aplica restricciones adicionales, como la eliminación automática de caracteres que no son alfanuméricos.

También puedes usar el elemento <displayname></displayname> para etiquetar la política en el editor de proxies de la interfaz de usuario de Apigee con un nombre diferente en lenguaje natural.

N/A Obligatorio
continueOnError Asigna el valor false para devolver un error cuando falle una política. Este es el comportamiento esperado de la mayoría de las políticas.

Asigna el valor true para que la ejecución del flujo continúe incluso después de que falle una política.

falso Opcional
habilitada Asigna el valor true para aplicar la política.

Selecciona false para desactivar la política. La política no se aplicará, aunque siga adjunta a un flujo.

true Opcional
asíncrono Este atributo está obsoleto. falso Obsoleto

<DisplayName>

<DisplayName>Policy Display Name</DisplayName>

Se usa junto con el atributo name para etiquetar la política en el editor de proxies de la interfaz de usuario de Apigee con un nombre diferente en lenguaje natural.

Predeterminado Si omite este elemento, se usará el valor del atributo name de la política.
Presencia Opcional
Tipo Cadena

<Source>

<Source>jwt-variable</Source>

Si está presente, especifica la variable de flujo en la que la política espera encontrar el JWT que se va a decodificar.

Predeterminado request.header.authorization (Consulta la nota anterior para obtener información importante sobre el valor predeterminado).
Presencia Opcional
Tipo Cadena
Valores válidos Nombre de una variable de flujo de Apigee

Variables de flujo

Si se verifica correctamente, las políticas Verificar JWT y Decodificar JWT definen variables de contexto según este patrón:

jwt.{policy_name}.{variable_name}

Por ejemplo, si el nombre de la política es jwt-parse-token , la política almacenará el asunto especificado en el JWT en la variable de contexto denominada jwt.jwt-parse-token.decoded.claim.sub. (Para que sea retrocompatible, también estará disponible en jwt.jwt-parse-token.claim.subject).

Nombre de variable Descripción
claim.audience La reclamación de audiencia del JWT. Este valor puede ser una cadena o un array de cadenas.
claim.expiry Fecha y hora de vencimiento, expresadas en milisegundos desde el inicio del registro de tiempo.
claim.issuedat Fecha en la que se emitió el token, expresada en milisegundos desde el inicio del registro de tiempo.
claim.issuer La reclamación de la entidad emisora del JWT.
claim.notbefore Si el JWT incluye una reclamación nbf, esta variable contendrá el valor, expresado en milisegundos desde el 1 de enero de 1970 a las 00:00:00.000 GMT.
claim.subject La reclamación de asunto del JWT.
claim.name Valor de la reclamación con nombre (estándar o adicional) en la carga útil. Se definirá uno para cada reclamación de la carga útil.
decoded.claim.name El valor analizable en JSON de la reclamación con nombre (estándar o adicional) de la carga útil. Se define una variable para cada reclamación de la carga útil. Por ejemplo, puedes usar decoded.claim.iat para obtener la hora de emisión del JWT, expresada en segundos desde la época. Aunque también puedes usar las variables de flujo claim.name, esta es la variable recomendada para acceder a una reclamación.
decoded.header.name Valor analizable de JSON de un encabezado de la carga útil. Se define una variable para cada encabezado de la carga útil. Aunque también puedes usar las variables de flujo header.name, esta es la variable recomendada para acceder a un encabezado.
expiry_formatted Fecha y hora de vencimiento, con formato de cadena legible por humanos. Ejemplo: 2017-09-28T21:30:45.000+0000
header.algorithm El algoritmo de firma usado en el JWT. Por ejemplo, RS256, HS384, etc. Para obtener más información, consulta Parámetro de encabezado(algoritmo).
header.kid El ID de clave, si se ha añadido al generar el JWT. Consulta también "Usar un conjunto de claves web JSON (JWKS)" en Información general sobre políticas de JWT para verificar un JWT. Consulte más información sobre el parámetro de encabezado(ID de clave).
header.type Su valor será JWT.
header.name El valor del encabezado en cuestión (estándar o adicional). Se definirá uno de estos para cada encabezado adicional en la parte del encabezado del JWT.
header-json El encabezado en formato JSON.
is_expired verdadero o falso
payload-claim-names Un array de reclamaciones admitidas por el JWT.
payload-json
La carga útil en formato JSON.
seconds_remaining Número de segundos que faltan para que caduque el token. Si el token ha caducado, este número será negativo.
time_remaining_formatted El tiempo restante antes de que caduque el token, con el formato de una cadena legible por humanos. Ejemplo: 00:59:59.926
valid En el caso de VerifyJWT, esta variable será true cuando se verifique la firma y la hora actual sea anterior a la fecha de vencimiento del token y posterior al valor notBefore del token, si están presentes. En caso contrario, devuelve el valor false.

En el caso de DecodeJWT, esta variable no se define.

Referencia de errores

En esta sección se describen los códigos de error y los mensajes de error que devuelve Apigee, así como las variables de error que define, cuando esta política activa un error. Es importante que conozcas esta información si vas a desarrollar reglas de errores para gestionarlos. Para obtener más información, consulta Qué debes saber sobre los errores de las políticas y Cómo gestionar los fallos.

Errores de tiempo de ejecución

Estos errores pueden producirse cuando se ejecuta la política.

Código de fallo Estado de HTTP Causa Solucionar
steps.jwt.FailedToDecode 401 Se produce cuando la política no puede decodificar el JWT. Es posible que el JWT tenga un formato incorrecto, no sea válido o no se pueda decodificar.
steps.jwt.FailedToResolveVariable 401 Se produce cuando no existe la variable de flujo especificada en el elemento <Source> de la política.
steps.jwt.InvalidToken 401 Se produce cuando la variable de flujo especificada en el elemento <Source> de la política está fuera del ámbito o no se puede resolver.

Errores de implementación

Estos errores pueden producirse al implementar un proxy que contenga esta política.

Nombre del error Causa Solucionar
InvalidEmptyElement Se produce cuando la variable de flujo que contiene el JWT que se va a decodificar no se especifica en el elemento <Source> de la política.

Variables de error

Estas variables se definen cuando se produce un error de tiempo de ejecución. Para obtener más información, consulta el artículo Información sobre los errores de las políticas.

Variables Dónde Ejemplo
fault.name="fault_name" fault_name es el nombre del error, tal como se indica en la tabla Errores de tiempo de ejecución de arriba. El nombre del error es la última parte del código de error. fault.name Matches "InvalidToken"
JWT.failed Todas las políticas de JWT definen la misma variable en caso de error. JWT.failed = true

Ejemplo de respuesta de error

Códigos de error de la política de JWT

Para gestionar los errores, la práctica recomendada es interceptar la parte errorcode de la respuesta de error. No te fíes del texto de faultstring, ya que podría cambiar.

Regla de error de ejemplo

    <FaultRules>
        <FaultRule name="JWT Policy Errors">
            <Step>
                <Name>JavaScript-1</Name>
                <Condition>(fault.name Matches "InvalidToken")</Condition>
            </Step>
            <Condition>JWT.failed=true</Condition>
        </FaultRule>
    </FaultRules>