Esta página se aplica a Apigee y Apigee hybrid.
Consulta la documentación de
Apigee Edge.
La política DecodeJWT 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 JWT Decode 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.
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 elementos 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 puede usar el elemento |
N/A | Obligatorio |
| continueOnError |
Asigna el valor false para devolver un error cuando falle una política. Este es el comportamiento esperado en la mayoría de las políticas.
Asigna el valor |
falso | Opcional |
| habilitada |
Asigna el valor true para aplicar la política.
Selecciona |
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 ejecuta de forma correcta, las políticas de verificación de JWT y decodificación de JWT establecen 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 esta variable de contexto: jwt.jwt-parse-token.decoded.claim.sub
(Para la retrocompatibilidad, también estará disponible en jwt.jwt-parse-token.claim.subject).
| Nombre de la variable | Descripción |
|---|---|
claim.audience |
La reclamación de público de JWT. Este valor puede ser una string o un arreglo de strings. |
claim.expiry |
La fecha y hora de vencimiento, expresada en segundos desde el ciclo de entrenamiento. |
claim.issuedat |
La fecha en que se emitió el token, expresada en segundos desde el ciclo de entrenamiento. |
claim.issuer |
La reclamación de la entidad emisora de JWT. |
claim.notbefore |
Si el JWT incluye una reclamación nbf, esta variable contendrá el valor, expresado en milisegundos desde el ciclo de entrenamiento. |
claim.subject |
La reclamación del asunto de JWT. |
claim.name |
El valor de la reclamación con nombre (estándar o adicional) en la carga útil. Uno de estos se configurará para cada reclamación en la carga útil. |
decoded.claim.name |
El valor JSON analizable de la reclamación con nombre (estándar o adicional) en la carga útil. Se configura una variable para cada reclamación en la carga útil. Por ejemplo, puedes usar decoded.claim.iat para recuperar la hora de emisión del JWT, expresada en segundos desde el ciclo de entrenamiento. Si bien también puedes usar las variables de flujo claim.name, esta es la variable recomendada para acceder a una reclamación. |
decoded.header.name |
El valor JSON analizable de un encabezado en la carga útil. Se configura una variable para cada encabezado de la carga útil. Si bien también puedes usar las variables de flujo header.name, esta es la variable recomendada para acceder a un encabezado. |
expiry_formatted |
La fecha y hora de vencimiento, con formato de string legible. Ejemplo: 2017-09-28T21:30:45.000+0000 |
header.algorithm |
El algoritmo de firma que se usa en el JWT. Por ejemplo, RS256, HS384, etcétera. Consulta Parámetro de encabezado (algoritmo) para obtener más información. |
header.kid |
El ID de clave, si se agregó cuando se generó el JWT. Consulta también “Usa el conjunto de claves web de JSON (JWKS)” en la descripción general de las políticas de JWT para verificar uno. Consulta el Parámetro de encabezado (ID de clave) para obtener más información. |
header.type |
Se configurará como JWT. |
header.name |
El valor del encabezado con nombre (estándar o adicional). Uno de estos se establecerá para cada encabezado adicional en la parte del encabezado del JWT. |
header-json |
El encabezado en formato JSON |
is_expired |
True o False |
payload-claim-names |
Un arreglo de reclamaciones compatibles con JWT. |
payload-json |
La carga útil en formato JSON.
|
seconds_remaining |
La cantidad de segundos antes de que venza el token. Si el token venció, este número será negativo. |
time_remaining_formatted |
El tiempo restante antes de que el token venza, con el formato de una string legible. Ejemplo: 00:59:59.926 |
valid |
En el caso de VerifyJWT, esta variable será verdadera cuando se verifique la firma y la hora actual será anterior al vencimiento del token y, si están presentes, después del valor notBefore. De lo contrario, es falso.
En el caso de DecodeJWT, esta variable no está configurada. |
Referencia de errores
This section describes the fault codes and error messages that are returned and fault variables that are set by Apigee when this policy triggers an error. This information is important to know if you are developing fault rules to handle faults. To learn more, see What you need to know about policy errors and Handling faults.
Runtime errors
These errors can occur when the policy executes.
| Fault code | HTTP status | Cause | Fix |
|---|---|---|---|
steps.jwt.FailedToDecode |
401 |
Occurs when the policy is unable to decode the JWT. The JWT may be malformed, invalid or otherwise not decodable. | build |
steps.jwt.FailedToResolveVariable |
401 |
Occurs when the flow variable specified in the <Source> element of
the policy does not exist. |
|
steps.jwt.InvalidToken |
401 |
Occurs when the flow variable specified in the <Source> element of
the policy is out of scope or can't be resolved. |
build |
Deployment errors
These errors can occur when you deploy a proxy containing this policy.
| Error name | Cause | Fix |
|---|---|---|
InvalidEmptyElement |
Occurs when the flow variable containing the JWT to be decoded is not specified in the
<Source> element of the policy.
|
build |
Variables con fallas
Estas variables se configuran cuando se genera un error de entorno de ejecución. Para obtener más información, consulta Qué debes saber sobre los errores de la política.
| Variables | Donde | Ejemplo |
|---|---|---|
fault.name="fault_name" |
fault_name es el nombre de la falla, como se indica en la tabla de Errores del entorno de ejecución anterior. El nombre de la falla es la última parte del código de la falla. | fault.name Matches "InvalidToken" |
JWT.failed |
Todas las políticas de JWT establecen la misma variable en caso de falla. | JWT.failed = true |
Ejemplo de respuesta de error
Para controlar errores, se recomienda capturar la parte errorcode de la respuesta de error. No dependas del texto en la faultstring, ya que podría cambiar.
Ejemplo de regla de falla
<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>