Esta é a documentação do Apigee Edge.
Acesse
Documentação da Apigee X. informações

O que
Decodifica um JWT sem verificar a assinatura no JWT. Isso é mais útil quando usado em conjunto com a política VerifyJWT, quando o valor de uma declaração dentro do JWT precisa ser conhecido antes de verificar a assinatura do JWT.
A política de decodificação do JWT funciona independentemente do algoritmo usado para assinar o JWT. Consulte a visão geral das políticas do JWS e do JWT para uma introdução detalhada.
Vídeo
Assista a um vídeo curto para saber como decodificar um JWT.
Amostra: decodificar um JWT
A política mostrada abaixo decodifica um JWT encontrado na variável de fluxo var.jwt. Essa variável precisa estar presente e conter um JWT viável (decodificável). A política pode receber o JWT de qualquer variável de fluxo.
<DecodeJWT name="JWT-Decode-HS256"> <DisplayName>JWT Verify HS256</DisplayName> <Source>var.jwt</Source> </DecodeJWT>
A política grava a saída em variáveis de contexto para que as políticas ou condições subsequentes no proxy de API possam examinar esses valores. Consulte Variáveis de fluxo para ver uma lista das variáveis definidas por essa política.
Referência de elemento para decodificar JWT
A referência de política descreve os elementos e atributos da política "Decodificação de JWT".
Atributos que se aplicam ao elemento de nível superior
<DecodeJWT name="JWT" continueOnError="false" enabled="true" async="false">
Os seguintes atributos são comuns a todos os elementos pai de política.
Atributo | Descrição | Padrão | Presença |
---|---|---|---|
nome |
O nome interno da política. Os caracteres que podem ser usados no nome são restritos a:
A-Z0-9._\-$ % . No entanto, a interface de gerenciamento de borda aplica
restrições, como a remoção automática de caracteres que não são alfanuméricos.
Opcionalmente, use o elemento |
N/A | Obrigatório |
continueOnError |
Defina como false para retornar um erro quando uma política falhar. Esse é o comportamento
esperado na maioria das políticas.
Defina como |
falso | Opcional |
ativado |
Defina como true para aplicar a política.
Defina como |
verdadeiro | Opcional |
async | Esse atributo está obsoleto. | falso | Suspenso |
<DisplayName>
<DisplayName>Policy Display Name</DisplayName>
Use além do atributo name para rotular a política no editor de proxy da IU de gerenciamento com um nome de linguagem natural diferente.
Padrão | Se você omitir esse elemento, o valor do atributo name da política será usado. |
Presença | Opcional |
Tipo | String |
<Source>
<Source>jwt-variable</Source>
Se presente, especifica a variável de fluxo em que a política espera encontrar o JWT a ser decodificado.
Padrão | request.header.authorization . Consulte a observação acima para informações importantes sobre o padrão. |
Presença | Opcional |
Tipo | String |
Valores válidos | Um nome de variável do fluxo do Edge |
Variáveis de fluxo
Após a conclusão, as políticas Verificar JWT e Decodificar JWT definem variáveis de contexto de acordo com este padrão:
jwt.{policy_name}.{variable_name}
Por exemplo, se o nome da política for jwt-parse-token
, a política armazenará o assunto especificado no JWT para esta variável de contexto: jwt.jwt-parse-token.decoded.claim.sub
Para compatibilidade com versões anteriores, ela também vai estar disponível em jwt.jwt-parse-token.claim.subject
.
Nome da variável | Descrição |
---|---|
claim.audience |
A declaração de público do JWT. Esse valor pode ser uma string ou uma matriz de strings. |
claim.expiry |
A data/hora de validade, expressa em segundos desde o período. |
claim.issuedat |
A data em que o token foi emitido, expressa em segundos desde o período. |
claim.issuer |
A declaração do emissor do JWT. |
claim.notbefore |
Se o JWT incluir uma declaração nbf, essa variável conterá o valor, expresso em milissegundos desde o período. |
claim.subject |
A declaração do assunto do JWT. |
claim.name |
O valor da declaração nomeada (padrão ou adicional) no payload. Um deles será definido para cada reivindicação no payload. |
decoded.claim.name |
O valor analisável pelo JSON da declaração nomeada (padrão ou adicional) no payload. Uma variável é definida para
cada declaração no payload. Por exemplo, é possível usar decoded.claim.iat para
recuperar o momento de emissão do JWT, expresso em segundos desde o período. Embora você também possa usar as variáveis de fluxo claim.name ,
essa é a variável recomendada para acessar uma declaração. |
decoded.header.name |
É o valor analisável pelo JSON de um cabeçalho no payload. Uma variável é definida para
cada cabeçalho no payload. Ainda que você também possa usar as variáveis de fluxo header.name ,
essa é a variável recomendada para acessar um cabeçalho. |
expiry_formatted |
A data/hora de validade, formatada como uma string legível. Exemplo: 2017-09-28T21:30:45.000+0000 |
header.algorithm |
O algoritmo de assinatura usado no JWT. Por exemplo, RS256, HS384 e assim por diante. Consulte Parâmetro de cabeçalho (algoritmo) para saber mais. |
header.kid |
O ID da chave, se adicionado quando o JWT foi gerado. Consulte também "Como usar um conjunto de chaves da Web JSON (JWKS)" na visão geral das políticas JWT para verificar um JWT. Consulte Parâmetro de cabeçalho (ID da chave) para mais informações. |
header.type |
Será definido como JWT . |
header.name |
O valor do cabeçalho nomeado (padrão ou adicional). Um deles será definido para cada cabeçalho adicional na parte do cabeçalho do JWT. |
header-json |
O cabeçalho no formato JSON. |
is_expired |
verdadeiro ou falso |
payload-claim-names |
Uma matriz de declarações aceitas pelo JWT. |
payload-json |
O payload no formato JSON.
|
seconds_remaining |
O número de segundos até a expiração do token. Se o token tiver expirado, esse número será negativo. |
time_remaining_formatted |
O tempo restante para expiração do token, formatado como uma string legível. Exemplo: 00:59:59.926 |
valid |
No caso de VerifyJWT, essa variável será verdadeira quando a assinatura for verificada e a hora atual for anterior à expiração do token e posterior ao valor notBefore, se estiverem presentes. Caso contrário, ela será falsa.
No caso de DecodeJWT, essa variável não está definida. |
Referência de erros
This section describes the fault codes and error messages that are returned and fault variables that are set by Edge 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 |
Fault variables
These variables are set when a runtime error occurs. For more information, see What you need to know about policy errors.
Variables | Where | Example |
---|---|---|
fault.name="fault_name" |
fault_name is the name of the fault, as listed in the Runtime errors table above. The fault name is the last part of the fault code. | fault.name Matches "TokenExpired" |
JWT.failed |
All JWT policies set the same variable in the case of a failure. | JWT.failed = true |
Example error response
For error handling, the best practice is to trap the errorcode
part of the error
response. Do not rely on the text in the faultstring
, because it could change.
Example fault rule
<FaultRules> <FaultRule name="JWT Policy Errors"> <Step> <Name>JavaScript-1</Name> <Condition>(fault.name Matches "TokenExpired")</Condition> </Step> <Condition>JWT.failed=true</Condition> </FaultRule> </FaultRules>