Esta é a documentação do Apigee Edge.
Acesse
Documentação da Apigee X. informações
O que
Verifica a assinatura em um JWT recebido de clientes ou outros sistemas. Essa política também extrai as declarações em variáveis de contexto para que as políticas ou condições subsequentes possam examinar esses valores e tomar decisões de autorização ou roteamento. Consulte a visão geral das políticas do JWS e do JWT para uma introdução detalhada.
Quando esta política é executada, o Edge verifica a assinatura de um JWT e se ele está válidos de acordo com a expiração e os tempos não antes, se estiverem presentes. A política também pode verificar os valores de declarações específicas no JWT, como o assunto, o emissor, o público ou o valor de declarações adicionais.
Se o JWT for verificado e válido, todas as declarações contidas nele serão extraídas em variáveis de contexto para uso por políticas ou condições subsequentes, e a solicitação poderá continuar. Se não for possível verificar a assinatura do JWT ou se o JWT for inválido devido a um dos carimbos de data/hora, todo o processamento será interrompido e um erro será retornado na resposta.
Para saber mais sobre as partes de um JWT e como elas são criptografadas e assinadas, consulte RFC7519.
Vídeo
Assista a um breve vídeo para saber como verificar a assinatura em um JWT.
Amostras
Verificar um JWT assinado com o algoritmo HS256
Esta política de exemplo verifica um JWT assinado com o algoritmo de criptografia HS256, ou HMAC,
usando uma soma de verificação SHA-256. O JWT é transmitido na solicitação do proxy usando um parâmetro de formulário chamado
jwt
. A chave está contida em uma variável chamada private.secretkey
.
Veja no vídeo acima um exemplo completo, incluindo como fazer uma solicitação à política.
A configuração da política inclui as informações que o Edge precisa para decodificar e avaliar o JWT. como onde encontrar o JWT (em uma variável de fluxo especificada no elemento de origem), a solicitação algoritmo de assinatura, onde encontrar a chave secreta, armazenada em uma variável de fluxo do Edge, que pode foram recuperados da KVM do Edge, por exemplo) e um conjunto de declarações obrigatórias e seus valores.
<VerifyJWT name="JWT-Verify-HS256"> <DisplayName>JWT Verify HS256</DisplayName> <Algorithm>HS256</Algorithm> <Source>request.formparam.jwt</Source> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> <SecretKey encoding="base64"> <Value ref="private.secretkey"/> </SecretKey> <Subject>monty-pythons-flying-circus</Subject> <Issuer>urn://apigee-edge-JWT-policy-test</Issuer> <Audience>fans</Audience> <AdditionalClaims> <Claim name="show">And now for something completely different.</Claim> </AdditionalClaims> </VerifyJWT>
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.
Verificar um JWT assinado com o algoritmo RS256
Esta política de exemplo verifica um JWT assinado com o algoritmo RS256. Para verificar, você precisa fornecer a chave pública. O JWT é transmitido na solicitação do proxy usando um parâmetro de formulário chamado
jwt
. A chave pública está contida em uma variável chamada public.publickey
.
Veja no vídeo acima um exemplo completo, incluindo como fazer uma solicitação à política.
Consulte a referência de elemento para detalhes sobre os requisitos e as opções de cada elemento desta política de amostra.
<VerifyJWT name="JWT-Verify-RS256"> <Algorithm>RS256</Algorithm> <Source>request.formparam.jwt</Source> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> <PublicKey> <Value ref="public.publickey"/> </PublicKey> <Subject>apigee-seattle-hatrack-montage</Subject> <Issuer>urn://apigee-edge-JWT-policy-test</Issuer> <Audience>urn://c60511c0-12a2-473c-80fd-42528eb65a6a</Audience> <AdditionalClaims> <Claim name="show">And now for something completely different.</Claim> </AdditionalClaims> </VerifyJWT>
Para a configuração acima, um JWT com este cabeçalho …
{ "typ" : "JWT", "alg" : "RS256" }
E este payload…
{ "sub" : "apigee-seattle-hatrack-montage", "iss" : "urn://apigee-edge-JWT-policy-test", "aud" : "urn://c60511c0-12a2-473c-80fd-42528eb65a6a", "show": "And now for something completely different." }
… será considerado válido, se a assinatura puder ser verificada com a chave pública fornecida.
Um JWT com o mesmo cabeçalho, mas com este payload…
{ "sub" : "monty-pythons-flying-circus", "iss" : "urn://apigee-edge-JWT-policy-test", "aud" : "urn://c60511c0-12a2-473c-80fd-42528eb65a6a", "show": "And now for something completely different." }
… Será determinado como inválido, mesmo que a assinatura seja verificada, porque a declaração "sub" incluída no JWT não corresponde ao valor obrigatório do elemento "Subject", conforme especificado na configuração da política.
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.
Como definir os elementos principais
Os elementos usados para especificar a chave usada para verificar o JWT dependem do algoritmo escolhido, conforme mostrado na tabela a seguir:
Algoritmo | Elementos-chave | |
---|---|---|
HS* |
<SecretKey encoding="base16|hex|base64|base64url"> <Value ref="private.secretkey"/> </SecretKey> |
|
RS*, ES*, PS* | <PublicKey> <Value ref="rsa_public_key_or_value"/> </PublicKey> ou <PublicKey> <Certificate ref="signed_cert_val_ref"/> </PublicKey> ou <PublicKey> <JWKS ref="jwks_val_or_ref"/> </PublicKey> |
|
*Para mais informações sobre os requisitos de chave, consulte Sobre algoritmos de criptografia de assinatura. |
Referência de elemento
A referência de política descreve os elementos e atributos da política "Verificar JWT".
Observação: a configuração varia um pouco dependendo do algoritmo de criptografia utilizado. Consulte os Amostras para ver exemplos que demonstram configurações para casos de uso específicos.
Atributos que se aplicam ao elemento de nível superior
<VerifyJWT 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 |
<Algoritmo>S
<Algorithm>HS256</Algorithm>
Especifica o algoritmo de criptografia para assinar o token. Os algoritmos RS*/PS*/ES* empregam um par de chaves públicas/secretas, enquanto os algoritmos HS* empregam um secret compartilhado. Consulte também Sobre algoritmos de criptografia de assinatura.
É possível especificar vários valores separados por vírgulas. Por exemplo, "HS256, HS512" ou "RS256, PS256". No entanto, não é possível combinar algoritmos HS* e ES* com nenhum outro porque eles exigem um tipo de chave específico. É possível combinar algoritmos RS* e PS*.
Padrão | N/A |
Presença | Obrigatório |
Tipo | String de valores separados por vírgulas |
Valores válidos | HS256, HS384, HS512, RS256, RS384, RS512, ES256, ES384, ES512, PS256, PS384, PS512 |
<Audience>
<Audience>audience-here</Audience> or: <Audience ref='variable-name-here'/>
A política verifica se a declaração de público no JWT corresponde ao valor especificado na configuração. Se não houver correspondência, a política gerará um erro. Essa declaração identifica os destinatários para quem o JWT é destinado. Esta é uma das declarações registradas mencionadas em RFC7519.
Padrão | N/A |
Presença | Opcional |
Tipo | String |
Valores válidos | Uma variável ou string de fluxo que identifica o público. |
<AdditionalClaims/Claim>
<AdditionalClaims> <Claim name='claim1'>explicit-value-of-claim-here</Claim> <Claim name='claim2' ref='variable-name-here'/> <Claim name='claim3' ref='variable-name-here' type='boolean'/> </AdditionalClaims> or: <AdditionalClaims ref='claim_payload'/>
Valida se o payload do JWT contém as declarações adicionais especificadas e que os valores de declaração declarados correspondem.
Uma declaração adicional usa um nome que não é um dos nomes de declaração JWT registrados padrão. O valor de uma declaração adicional pode ser uma string, um número, um booleano, um mapa ou uma matriz. Um mapa é simplesmente um conjunto de pares de nome/valor. O valor de uma declaração de qualquer um desses tipos pode ser especificado explicitamente na configuração da política ou indiretamente por meio de uma referência a uma variável de fluxo.
Padrão | N/A |
Presença | Opcional |
Tipo | String, número, booleano ou mapa |
Array | Defina como true para indicar se o valor é uma matriz de tipos. Padrão: false |
Valores válidos | Qualquer valor que você queira usar para uma reivindicação adicional. |
O elemento <Claim>
usa estes atributos:
- name: obrigatório. O nome da declaração.
- ref: (opcional) o nome de uma variável de fluxo. Se presente, a política usará o valor dessa variável como a declaração. Se um atributo ref e um valor de declaração explícito forem especificados, o valor explícito será o padrão e será usado se a variável de fluxo referenciada não for resolvida.
- type: (opcional) uma das seguintes opções: string (padrão), número, booleano ou mapa.
- array: (opcional) defina como true para indicar se o valor é uma matriz de tipos. Padrão: false
Quando você inclui o elemento <Claim>
, os nomes das declarações são definidos estaticamente quando você
configura a política. Como alternativa, é possível transmitir um objeto JSON para especificar os nomes das declarações.
Como o objeto JSON é transmitidos como uma variável, os nomes das declarações são determinados no ambiente de execução.
Exemplo:
<AdditionalClaims ref='json_claims'/>
Em que a variável json_claims
contém um objeto JSON no formulário:
{ "sub" : "person@example.com", "iss" : "urn://secure-issuer@example.com", "non-registered-claim" : { "This-is-a-thing" : 817, "https://example.com/foobar" : { "p": 42, "q": false } } }
<AdditionalHeaders/Claim>
<AdditionalHeaders> <Claim name='claim1'>explicit-value-of-claim-here</Claim> <Claim name='claim2' ref='variable-name-here'/> <Claim name='claim3' ref='variable-name-here' type='boolean'/> <Claim name='claim4' ref='variable-name' type='string' array='true'/> </AdditionalHeaders>
Valida se o cabeçalho JWT contém os pares de nome/valor adicionais de declaração especificados e que os valores de declaração declarados correspondem.
Uma declaração adicional usa um nome que não é um dos nomes de declaração JWT registrados padrão. O valor de uma declaração adicional pode ser uma string, um número, um booleano, um mapa ou uma matriz. Um mapa é simplesmente um conjunto de pares de nome/valor. O valor de uma declaração de qualquer um desses tipos pode ser especificado explicitamente na configuração da política ou indiretamente por meio de uma referência a uma variável de fluxo.
Padrão | N/A |
Presença | Opcional |
Tipo |
String (padrão), número, booleano ou mapa. O tipo padrão será String se nenhum tipo for especificado. |
Array | Defina como true para indicar se o valor é uma matriz de tipos. Padrão: false |
Valores válidos | Qualquer valor que você queira usar para uma reivindicação adicional. |
O elemento <Claim>
usa estes atributos:
- name: obrigatório. O nome da declaração.
- ref: (opcional) o nome de uma variável de fluxo. Se presente, a política usará o valor dessa variável como a declaração. Se um atributo ref e um valor de declaração explícito forem especificados, o valor explícito será o padrão e será usado se a variável de fluxo referenciada não for resolvida.
- type: (opcional) uma das seguintes opções: string (padrão), número, booleano ou mapa.
- array: (opcional) defina como true para indicar se o valor é uma matriz de tipos. Padrão: false
<CustomClaims>
Observação: atualmente, um elemento CustomClaims é inserido quando você adiciona uma nova política GenerateJWT por meio da IU. Este elemento não é funcional e é ignorado. O elemento correto a ser usado é <AdditionalClaims>. A IU será atualizada para inserir os elementos corretos posteriormente.
<Id>
<Id>explicit-jti-value-here</Id> -or- <Id ref='variable-name-here'/> -or- <Id/>
Verifica se o JWT tem a declaração jti específica. Quando o valor text e o atributo ref estiverem vazios, a política gerará um jti contendo um UUID aleatório. A declaração do ID do JWT (jti) é um identificador exclusivo do JWT. Para mais informações sobre jti, consulte RFC7519.
Padrão | N/A |
Presença | Opcional |
Tipo | String ou referência. |
Valores válidos | Uma string ou o nome de uma variável de fluxo que contém o ID. |
<IgnoreCriticalHeaders>
<IgnoreCriticalHeaders>true|false</IgnoreCriticalHeaders>
Defina como "false" se você quiser que a política gere um erro quando qualquer cabeçalho listado no cabeçalho
crit do JWT não estiver listado no elemento <KnownHeaders>
.
Defina como "true" para que a política VerifyJWT ignore o cabeçalho crit.
Uma das razões para definir esse elemento como verdadeiro é se você estiver em um ambiente de teste e ainda não estiver pronto para causar uma falha em um cabeçalho ausente.
Padrão | falso |
Presença | Opcional |
Tipo | Booleano |
Valores válidos | verdadeiro ou falso |
<IgnoreIssuedAt>
<IgnoreIssuedAt>true|false</IgnoreIssuedAt>
Defina como falso (padrão) se você quiser que a política gere um erro quando um JWT contiver uma
declaração iat
(Emitida em) que especifica um horário no futuro.
Defina como "true" para fazer com que a política ignore iat
durante a verificação.
Padrão | falso |
Presença | Opcional |
Tipo | Booleano |
Valores válidos | verdadeiro ou falso |
<IgnoreUnresolvedVariables>
<IgnoreUnresolvedVariables>true|false</IgnoreUnresolvedVariables>
Defina como falso se você quiser que a política gere um erro quando qualquer variável referenciada especificada na política não for resolvida. Defina como "true" para tratar qualquer variável não resolvida como uma string vazia (null).
Padrão | falso |
Presença | Opcional |
Tipo | Booleano |
Valores válidos | verdadeiro ou falso |
<Issuer>
<Issuer ref='variable-name-here'/> <Issuer>issuer-string-here</Issuer>
A política verifica se o emissor no JWT corresponde à string especificada no elemento de configuração. Uma declaração que identifica o emissor do JWT. Esse é um dos conjuntos registrados de declarações mencionados na RFC7519.
Padrão | N/A |
Presença | Opcional |
Tipo | String ou referência |
Valores válidos | Qualquer |
<KnownHeaders>
<KnownHeaders>a,b,c</KnownHeaders> or: <KnownHeaders ref=’variable_containing_headers’/>
A política GenerateJWT usa o elemento <CriticalHeaders>
para preencher o
cabeçalho crit em um JWT. Exemplo:
{ “typ: “...”, “alg” : “...”, “crit” : [ “a”, “b”, “c” ], }
A política VerifyJWT examina o cabeçalho crit no JWT, se existir, e, para cada cabeçalho listado, ele
verifica se o elemento <KnownHeaders>
também lista esse cabeçalho. O
elemento <KnownHeaders>
pode conter um superconjunto dos itens listados em crit.
É necessário que todos os cabeçalhos listados em crit sejam listados no
elemento <KnownHeaders>
. Qualquer cabeçalho encontrado pela política em crit
que também não esteja listado em <KnownHeaders>
faz com que a política VerifyJWT falhe.
Se quiser, configure a política VerifyJWT para ignorar o cabeçalho crit
definindo o elemento <IgnoreCriticalHeaders>
como true
.
Padrão | N/A |
Presença | Opcional |
Tipo | Matriz de strings separadas por vírgulas |
Valores válidos | Uma matriz ou o nome de uma variável que contém a matriz. |
<PublicKey/Certificate>
<PublicKey> <Certificate ref="signed_public.cert"/> </PublicKey> -or- <PublicKey> <Certificate> -----BEGIN CERTIFICATE----- cert data -----END CERTIFICATE----- </Certificate> </PublicKey>
Especifica o certificado assinado usado para verificar a assinatura no JWT. Use o atributo ref para transmitir o certificado assinado em uma variável de fluxo ou especifique o certificado codificado em PEM diretamente. Use somente quando o algoritmo for RS256/RS384/RS512, PS256/PS384/PS512 ou ES256/ES384/ES512.
Padrão | N/A |
Presença | Para verificar um JWT assinado com um algoritmo RSA, você precisa usar os elementos de Certificado, JWK ou Valor. |
Tipo | String |
Valores válidos | Uma variável de fluxo ou string. |
<PublicKey/JWKS>
<!-- Specify the JWKS. --> <PublicKey> <JWKS>jwks-value-here</JWKS> </PublicKey> or: <!-- Specify a variable containing the JWKS. --> <PublicKey> <JWKS ref="public.jwks"/> </PublicKey> or: <!-- Specify a public URL that returns the JWKS. The URL is static, meaning you cannot set it using a variable. --> <PublicKey> <JWKS uri="jwks-url"/> </PublicKey>
Especifica um valor no formato JWKS (RFC 7517, em inglês) que contém um conjunto de chaves públicas. Use somente quando o algoritmo for RS256/RS384/RS512, PS256/PS384/PS512 ou ES256/ES384/ES512.
Se o JWT de entrada receber um ID de chave presente no conjunto de JWKS, a política usará a chave pública correta para verificar a assinatura JWT. Para detalhes sobre esse recurso, consulte Como usar um conjunto de chaves da Web JSON (JWKS) para verificar um JWT.
Se você buscar o valor de um URL público, o Edge armazenará o JWKS em cache por um período de 300 segundos. Quando o cache expira, o Edge busca o JWKS novamente.
Padrão | N/A |
Presença | Para verificar um JWT usando um algoritmo RSA, é necessário usar os elementos de Certificado, JWKS ou Valor. |
Tipo | String |
Valores válidos | Uma variável de fluxo, valor de string ou URL. |
<PublicKey/Value>
<PublicKey> <Value ref="public.publickeyorcert"/> </PublicKey> -or- <PublicKey> <Value> -----BEGIN PUBLIC KEY----- MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAw2kPrRzcufvUNHvTH/WW Q0UrCw5c0+Y707KX3PpXkZGbtTT4nvU1jC0d1lHV8MfUyRXmpmnNxJHAC2F73IyN C5TBtXMORc+us7A2cTtC4gZV256bT4h3sIEMsDl0Joz9K9MPzVPFxa1i0RgNt06n Xn/Bs2UbbLlKP5Q1HPxewUDEh0gVMqz9wdIGwH1pPxKvd3NltYGfPsUQovlof3l2 ALvO7i5Yrm96kknfFEWf1EjmCCKvz2vjVbBb6mp1ZpYfc9MOTZVpQcXSbzb/BWUo ZmkDb/DRW5onclGzxQITBFP3S6JXd4LNESJcTp705ec1cQ9Wp2Kl+nKrKyv1E5Xx DQIDAQAB -----END PUBLIC KEY----- </Value> </PublicKey>
Especifica a chave pública ou o certificado público usado para verificar a assinatura no JWT. Use o atributo ref para transmitir a chave/certificado em uma variável de fluxo ou especifique a chave codificada em PEM diretamente. Use somente quando o algoritmo for RS256/RS384/RS512, PS256/PS384/PS512, ou ES256/ES384/ES512.
Padrão | N/A |
Presença | Para verificar um JWT assinado com um algoritmo RSA, você precisa usar os elementos de Certificado, JWK ou Valor. |
Tipo | String |
Valores válidos | Uma variável de fluxo ou string. |
<SecretKey/Value>
<SecretKey encoding="base16|hex|base64|base64url"> <Value ref="private.your-variable-name"/> </SecretKey>
Fornece a chave secreta usada para verificar ou assinar tokens com um algoritmo HMAC. Use apenas quando o algoritmo é HS256, HS384 ou HS512.
Padrão | N/A |
Presença | Obrigatório para algoritmos HMAC. |
Tipo | String |
Valores válidos |
Para Use o atributo ref para passar a chave em uma variável de fluxo. Observação: no caso de uma variável de fluxo, ela precisa ter o prefixo "particular". Por exemplo,
|
<Source>
<Source>jwt-variable</Source>
Se presente, especifica a variável de fluxo em que a política espera encontrar o JWT a ser verificado.
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 | Nome de uma variável do fluxo de borda. |
<Subject>
<Subject>subject-string-here</Subject>
A política verifica se o assunto no JWT corresponde à string especificada na configuração da política. Essa declaração identifica ou faz uma declaração sobre o assunto do JWT. Este é um dos conjuntos de declarações padrão mencionados em RFC7519.
Padrão | N/A |
Presença | Opcional |
Tipo | String |
Valores válidos | Qualquer valor que identifica exclusivamente um assunto. |
<TimeAllowance>
<TimeAllowance>120s</TimeAllowance>
O "período de carência" dos horários. Por exemplo, se a cota de tempo estiver configurada como 60 segundos, um JWT expirado será tratado como ainda válido, por 60 segundos após a expiração declarada. O intervalo de antes do horário será avaliado de forma semelhante. O padrão é de 0 segundos (sem período de carência).
Padrão | 0 segundos (sem período de carência) |
Presença | Opcional |
Tipo | String |
Valores válidos |
Um valor ou uma referência a uma variável de fluxo contendo o valor. Os períodos podem ser
especificados da seguinte forma:
|
Flow variables
Upon success, the Verify JWT and Decode JWT policies set context variables according to this pattern:
jwt.{policy_name}.{variable_name}
For example, if the policy name is jwt-parse-token
, then the policy will store
the subject specified in the JWT to the context variable named jwt.jwt-parse-token.decoded.claim.sub
.
(For backward compatibility, it will also be available in jwt.jwt-parse-token.claim.subject
)
Variable name | Description |
---|---|
claim.audience |
The JWT audience claim. This value may be a string, or an array of strings. |
claim.expiry |
The expiration date/time, expressed in milliseconds since epoch. |
claim.issuedat |
The Date the token was issued, expressed in milliseconds since epoch. |
claim.issuer |
The JWT issuer claim. |
claim.notbefore |
If the JWT includes a nbf claim, this variable will contain the value, expressed in milliseconds since epoch. |
claim.subject |
The JWT subject claim. |
claim.name |
The value of the named claim (standard or additional) in the payload. One of these will be set for every claim in the payload. |
decoded.claim.name |
The JSON-parsable value of the named claim (standard or additional) in the payload. One variable is set for
every claim in the payload. For example, you can use decoded.claim.iat to
retrieve the issued-at time of the JWT, expressed in seconds since epoch. While you
can also use the claim.name flow variables, this is the
recommended variable to use to access a claim. |
decoded.header.name |
The JSON-parsable value of a header in the payload. One variable is set for
every header in the payload. While you can also use the header.name flow variables,
this is the recommended variable to use to access a header. |
expiry_formatted |
The expiration date/time, formatted as a human-readable string. Example: 2017-09-28T21:30:45.000+0000 |
header.algorithm |
The signing algorithm used on the JWT. For example, RS256, HS384, and so on. See (Algorithm) Header Parameter for more. |
header.kid |
The Key ID, if added when the JWT was generated. See also "Using a JSON Web Key Set (JWKS)" at JWT policies overview to verify a JWT. See (Key ID) Header Parameter for more. |
header.type |
Will be set to JWT . |
header.name |
The value of the named header (standard or additional). One of these will be set for every additional header in the header portion of the JWT. |
header-json |
The header in JSON format. |
is_expired |
true or false |
payload-claim-names |
An array of claims supported by the JWT. |
payload-json |
The payload in JSON format.
|
seconds_remaining |
The number of seconds before the token will expire. If the token is expired, this number will be negative. |
time_remaining_formatted |
The time remaining before the token will expire, formatted as a human-readable string. Example: 00:59:59.926 |
valid |
In the case of VerifyJWT, this variable will be true when the signature is verified, and
the current time is before the token expiry, and after the token notBefore value, if they
are present. Otherwise false.
In the case of DecodeJWT, this variable is not set. |
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 | Occurs when |
---|---|---|
steps.jwt.AlgorithmInTokenNotPresentInConfiguration |
401 | Occurs when the verification policy has multiple algorithms. |
steps.jwt.AlgorithmMismatch |
401 | The algorithm specified in the Generate policy did not match the one expected in the Verify policy. The algorithms specified must match. |
steps.jwt.FailedToDecode |
401 | The policy was unable to decode the JWT. The JWT is possibly corrupted. |
steps.jwt.GenerationFailed |
401 | The policy was unable to generate the JWT. |
steps.jwt.InsufficientKeyLength |
401 | For a key less than 32 bytes for the HS256 algorithm, less than 48 bytes for the HS386 algortithm, and less than 64 bytes for the HS512 algorithm. |
steps.jwt.InvalidClaim |
401 | For a missing claim or claim mismatch, or a missing header or header mismatch. |
steps.jwt.InvalidCurve |
401 | The curve specified by the key is not valid for the Elliptic Curve algorithm. |
steps.jwt.InvalidJsonFormat |
401 | Invalid JSON found in the header or payload. |
steps.jwt.InvalidToken |
401 | This error occurs when the JWT signature verification fails. |
steps.jwt.JwtAudienceMismatch |
401 | The audience claim failed on token verification. |
steps.jwt.JwtIssuerMismatch |
401 | The issuer claim failed on token verification. |
steps.jwt.JwtSubjectMismatch |
401 | The subject claim failed on token verification. |
steps.jwt.KeyIdMissing |
401 | The Verify policy uses a JWKS as a source for public keys, but the signed JWT does not
include a kid property in the header. |
steps.jwt.KeyParsingFailed |
401 | The public key could not be parsed from the given key information. |
steps.jwt.NoAlgorithmFoundInHeader |
401 | Occurs when the JWT contains no algorithm header. |
steps.jwt.NoMatchingPublicKey |
401 | The Verify policy uses a JWKS as a source for public keys, but the kid
in the signed JWT is not listed in the JWKS. |
steps.jwt.SigningFailed |
401 | In GenerateJWT, for a key less than the minimum size for the HS384 or HS512 algorithms |
steps.jwt.TokenExpired |
401 | The policy attempts to verify an expired token. |
steps.jwt.TokenNotYetValid |
401 | The token is not yet valid. |
steps.jwt.UnhandledCriticalHeader |
401 | A header found by the Verify JWT policy in the crit header is not
listed in KnownHeaders . |
steps.jwt.UnknownException |
401 | An unknown exception occurred. |
steps.jwt.WrongKeyType |
401 | Wrong type of key specified. For example, if you specify an RSA key for an Elliptic Curve algorithm, or a curve key for an RSA algorithm. |
Deployment errors
These errors can occur when you deploy a proxy containing this policy.
Error name | Cause | Fix |
---|---|---|
InvalidNameForAdditionalClaim |
The deployment will fail if the claim used in the child element <Claim>
of the <AdditionalClaims> element is one of the following registered names:
kid , iss , sub , aud , iat ,
exp , nbf , or jti .
|
build |
InvalidTypeForAdditionalClaim |
If the claim used in the child element <Claim>
of the <AdditionalClaims> element is not of type string , number ,
boolean , or map , the deployment will fail.
|
build |
MissingNameForAdditionalClaim |
If the name of the claim is not specified in the child element <Claim>
of the <AdditionalClaims> element, the deployment will fail.
|
build |
InvalidNameForAdditionalHeader |
This error ccurs when the name of the claim used in the child element <Claim>
of the <AdditionalClaims> element is either alg or typ .
|
build |
InvalidTypeForAdditionalHeader |
If the type of claim used in the child element <Claim>
of the <AdditionalClaims> element is not of type string , number ,
boolean , or map , the deployment will fail.
|
build |
InvalidValueOfArrayAttribute |
This error occurs when the value of the array attribute in the child element <Claim>
of the <AdditionalClaims> element is not set to true or false .
|
build |
InvalidValueForElement |
If the value specified in the <Algorithm> element is not a supported value,
the deployment will fail.
|
build |
MissingConfigurationElement |
This error will occur if the <PrivateKey> element is not used with
RSA family algorithms or the <SecretKey> element is not used with HS Family
algorithms.
|
build |
InvalidKeyConfiguration |
If the child element <Value> is not defined in the <PrivateKey>
or <SecretKey> elements, the deployment will fail.
|
build |
EmptyElementForKeyConfiguration |
If the ref attribute of the child element <Value> of the <PrivateKey>
or <SecretKey> elements is empty or unspecified, the deployment will fail.
|
build |
InvalidConfigurationForVerify |
This error occurs if the <Id> element is defined within the
<SecretKey> element.
|
build |
InvalidEmptyElement |
This error occurs if the <Source> element of the Verify JWT policy
is empty. If present, it must be defined with an Edge flow variable name.
|
build |
InvalidPublicKeyValue |
If the value used in the child element <JWKS> of the <PublicKey> element
does not use a valid format as specified in RFC 7517,
the deployment will fail.
|
build |
InvalidConfigurationForActionAndAlgorithm |
If the <PrivateKey> element is used with HS Family algorithms or
the <SecretKey> element is used with RSA Family algorithms, the
deployment will fail.
|
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>