Esta página aplica-se ao Apigee e ao Apigee Hybrid.
Veja a documentação do
Apigee Edge.
O quê
Descodifica um JWT sem validar a assinatura no JWT. Isto é mais útil quando usado em conjunto com a política VerifyJWT, quando o valor de uma reivindicação do JWT tem de ser conhecido antes de validar a assinatura do JWT.
A política de descodificação de JWT funciona independentemente do algoritmo usado para assinar o JWT. Consulte a vista geral das políticas de JWS e JWT para uma introdução detalhada.
Esta política é uma política padrão e pode ser implementada em qualquer tipo de ambiente. Para obter informações sobre os tipos de políticas e a disponibilidade com cada tipo de ambiente, consulte Tipos de políticas.
Vídeo
Veja um breve vídeo para saber como descodificar um JWT.
Exemplo: descodifique um JWT
A política apresentada abaixo descodifica um JWT encontrado na variável de fluxo var.jwt. Esta variável tem de estar presente e conter um JWT viável (decodificável). A política pode obter 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 escreve o respetivo resultado em variáveis de contexto para que as políticas ou as condições subsequentes no proxy de API possam examinar esses valores. Consulte o artigo Variáveis de fluxo para ver uma lista das variáveis definidas por esta política.
Referência de elemento para descodificar JWT
A referência da política descreve os elementos e os atributos da política Decode 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 principais da política.
Atributo | Descrição | Predefinição | Presença |
---|---|---|---|
nome |
O nome interno da política. Os carateres que pode usar no nome estão restritos a:
A-Z0-9._\-$ % . No entanto, a IU do Apigee aplica restrições adicionais, como a remoção automática de carateres que não sejam alfanuméricos.
Opcionalmente, use o elemento |
N/A | Obrigatória |
continueOnError |
Definido como false para devolver um erro quando uma política falha. Este comportamento é o esperado para a maioria das políticas.
Definido como |
falso | Opcional |
ativada |
Defina como true para aplicar a política.
Defina como |
verdadeiro | Opcional |
assíncrono | Este atributo foi descontinuado. | falso | Descontinuado |
<DisplayName>
<DisplayName>Policy Display Name</DisplayName>
Use em conjunto com o atributo name para etiquetar a política no editor de proxy da IU do Apigee com um nome diferente em linguagem natural.
Predefinição | Se omitir este elemento, é usado o valor do atributo name da política. |
Presença | Opcional |
Tipo | String |
<Source>
<Source>jwt-variable</Source>
Se estiver presente, especifica a variável de fluxo na qual a política espera encontrar o JWT para descodificar.
Predefinição | request.header.authorization (Consulte a nota acima para ver informações importantes
acerca da predefinição). |
Presença | Opcional |
Tipo | String |
Valores válidos | Um nome de variável de fluxo do Apigee |
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 erro
Esta secção descreve os códigos de falha e as mensagens de erro devolvidas, bem como as variáveis de falha definidas pelo Apigee quando esta política aciona um erro. É importante conhecer estas informações se estiver a desenvolver regras de falhas para tratar falhas. Para saber mais, consulte o artigo O que precisa de saber acerca dos erros de políticas e Como processar falhas.
Erros de tempo de execução
Estes erros podem ocorrer quando a política é executada.
Código de falha | Estado de HTTP | Causa | Corrigir |
---|---|---|---|
steps.jwt.FailedToDecode |
401 |
Ocorre quando a política não consegue descodificar o JWT. O JWT pode ter um formato incorreto, ser inválido ou não ser descodificável. | build |
steps.jwt.FailedToResolveVariable |
401 |
Ocorre quando a variável de fluxo especificada no elemento <Source> da política não existe. |
|
steps.jwt.InvalidToken |
401 |
Ocorre quando a variável de fluxo especificada no elemento <Source> da política está fora do âmbito ou não pode ser resolvida. |
build |
Erros de implementação
Estes erros podem ocorrer quando implementa um proxy que contém esta política.
Nome do erro | Causa | Corrigir |
---|---|---|
InvalidEmptyElement |
Ocorre quando a variável de fluxo que contém o JWT a descodificar não é especificada no elemento <Source> da política.
|
build |
Variáveis de falha
Estas variáveis são definidas quando ocorre um erro de tempo de execução. Para mais informações, consulte o artigo O que precisa de saber acerca dos erros de políticas.
Variáveis | Onde | Exemplo |
---|---|---|
fault.name="fault_name" |
fault_name é o nome da falha, conforme indicado na tabela Erros de tempo de execução acima. O nome da falha é a última parte do código de falha. | fault.name Matches "InvalidToken" |
JWT.failed |
Todas as políticas de JWT definem a mesma variável em caso de falha. | JWT.failed = true |
Exemplo de resposta de erro
Para o processamento de erros, a prática recomendada é captar a parte errorcode
da resposta de erro. Não confie no texto em faultstring
, porque pode mudar.
Exemplo de regra de falha
<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>