Criterio VerifyJWT

Stai visualizzando la documentazione di Apigee Edge.
Vai alla sezione Documentazione di Apigee X.
Informazioni

Cosa

Verifica la firma su un JWT ricevuto da client o altri sistemi. Queste norme includono inoltre estrae le dichiarazioni in variabili di contesto in modo che le norme o le condizioni successive possano esaminare quei valori per prendere decisioni in merito all'autorizzazione o al routing. Per un'introduzione dettagliata, consulta la panoramica delle norme JWS e JWT.

Quando questo criterio viene eseguito, Edge verifica la firma di un JWT e che quest'ultimo sia validi in base alla scadenza e ai tempi di non precedente, se presenti. Il criterio può facoltativamente verificare inoltre i valori di specifiche rivendicazioni sul JWT, quali l’oggetto, l’emittente, pubblico o il valore delle rivendicazioni aggiuntive.

Se il JWT è verificato e valido, tutte le rivendicazioni contenute nel JWT saranno estratte nelle variabili di contesto per essere utilizzate da norme o condizioni successive, e la richiesta viene autorizzati a procedere. Se la firma JWT non può essere verificata o se il JWT non è valido a causa di uno dei timestamp, l'intera elaborazione si interrompe e la risposta restituisce un errore.

Per saperne di più sulle parti di un JWT e su come vengono criptate e firmate, consulta RFC7519.

Video

Guarda un breve video per scoprire come verificare la firma su un JWT.

Campioni

Verifica un JWT firmato con HS256 algoritmo

Questo criterio di esempio verifica un JWT firmato con l'algoritmo di crittografia HS256, HMAC. utilizzando un checksum SHA-256. Il JWT viene passato nella richiesta proxy utilizzando un parametro del modulo denominato jwt. La chiave è contenuta in una variabile denominata private.secretkey. Guarda il video riportato sopra per un esempio completo, incluso come presentare una richiesta per violazione delle norme.

La configurazione dei criteri include le informazioni necessarie a Edge per decodificare e valutare il JWT, ad esempio dove trovare il JWT (in una variabile di flusso specificata nell'elemento Sorgente), di firma, dove trovare la chiave segreta (memorizzata in una variabile di flusso Edge, sono stati recuperati dalla KVM perimetrale, ad esempio) e un insieme di attestazioni richieste e relative e i relativi valori.

<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>

Il criterio scrive l'output nelle variabili di contesto in modo che i criteri o le condizioni successive nel proxy API possono esaminare questi valori. Consulta Variabili di flusso per un delle variabili impostate da questo criterio.

Verificare un JWT firmato con RS256 algoritmo

Questo criterio di esempio verifica un JWT firmato con l'algoritmo RS256. Per verificare: devi fornire la chiave pubblica. Il JWT viene passato nella richiesta proxy utilizzando un parametro del modulo denominato jwt. La chiave pubblica è contenuta in una variabile denominata public.publickey. Guarda il video riportato sopra per un esempio completo, incluso come presentare una richiesta per violazione delle norme.

Consulta la sezione di riferimento dell'elemento per i dettagli sui requisiti e sulle opzioni per ogni elemento di questo una norma di esempio.

<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>

Per la configurazione precedente, un JWT con questa intestazione...

{
  "typ" : "JWT", 
  "alg" : "RS256"
}

E questo 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."
}

...sarà considerata valida, se la firma può essere verificata con il chiave.

Un JWT con la stessa intestazione ma con questo 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."
}

...sarà considerata non valida, anche se la firma potrà essere verificata, perché "sotto" dichiarazione inclusa nel JWT non corrisponde al valore richiesto dell'attributo "Oggetto" elemento come specificato nella configurazione del criterio.

Il criterio scrive l'output nelle variabili di contesto in modo che i criteri o le condizioni successive nel proxy API possono esaminare questi valori. Consulta Variabili di flusso per un delle variabili impostate da questo criterio.

Impostare gli elementi chiave

Gli elementi che utilizzi per specificare la chiave usata per verificare il JWT dipendono dall'algoritmo scelto. come illustrato nella tabella seguente:

Algoritmo Elementi principali
HS*
<SecretKey encoding="base16|hex|base64|base64url">
  <Value ref="private.secretkey"/>
</SecretKey>
RS*, ES*, PS*
<PublicKey>
  <Value ref="rsa_public_key_or_value"/>
</PublicKey>

oppure:

<PublicKey>
  <Certificate ref="signed_cert_val_ref"/>
</PublicKey>

oppure:

<PublicKey>
  <JWKS ref="jwks_val_or_ref"/>
</PublicKey>
* Per ulteriori informazioni sui requisiti principali, consulta Informazioni sugli algoritmi di crittografia della firma.

Riferimento elemento

La guida di riferimento al criterio descrive gli elementi e gli attributi del criterio Verifica JWT.

Nota:la configurazione varierà leggermente a seconda della crittografia. l'algoritmo utilizzato. Fai riferimento agli esempi per esempi che dimostrano configurazioni per casi d'uso specifici.

Attributi che si applicano elemento di primo livello

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

I seguenti attributi sono comuni a tutti gli elementi principali del criterio.

Attributo Descrizione Predefinita Presenza
nome Il nome interno del criterio. I caratteri utilizzabili nel nome sono limitati a: A-Z0-9._\-$ %. Tuttavia, l'interfaccia utente di gestione perimetrale applica come la rimozione automatica di caratteri non alfanumerici.

Se vuoi, puoi usare l'elemento <displayname></displayname> per etichetta il criterio nell'editor proxy dell'interfaccia utente di gestione con un linguaggio naturale diverso nome.

N/D Obbligatorio
continueOnError Imposta il valore su false per restituire un errore quando un criterio non viene eseguito. Si tratta di un comportamento previsto per la maggior parte dei criteri.

Imposta su true per fare in modo che l'esecuzione del flusso continui anche dopo un criterio non riesce.

falso Facoltativo
abilitata Imposta il valore su true per applicare il criterio.

Imposta su false per "disattivare" il criterio. Il criterio non verrà applicato in modo forzato anche se rimane collegato a un flusso.

true Facoltativo
asinc Questo attributo è obsoleto. falso Deprecato

&lt;DisplayName&gt;

<DisplayName>Policy Display Name</DisplayName>

Da utilizzare, in aggiunta all'attributo name, per etichettare il criterio nell'editor proxy dell'interfaccia utente di gestione con un nome diverso in linguaggio naturale.

Predefinita Se ometti questo elemento, viene utilizzato il valore dell'attributo nome del criterio.
Presenza Facoltativo
Tipo Stringa

&lt;Algorithm&gt;

<Algorithm>HS256</Algorithm>

Specifica l'algoritmo di crittografia per firmare il token. Gli algoritmi RS*/PS*/ES* impiegano una coppia di chiavi pubbliche/segrete, mentre gli algoritmi di HS* impiegano un segreto condiviso. Vedi anche Informazioni sugli algoritmi di crittografia della firma.

Puoi specificare più valori separati da virgole. Ad esempio "HS256, HS512" o "RS256, PS256". Tuttavia, non è possibile combinare gli algoritmi HS* con altri o algoritmi ES* con altri, in quanto richiedono un tipo di chiave specifico. È possibile combinare gli algoritmi RS* e PS*.

Predefinita N/D
Presenza Obbligatorio
Tipo Stringa di valori separati da virgole
Valori validi HS256, HS384, HS512, RS256, RS384, RS512, ES256, ES384, ES512, PS256, PS384, PS512

&lt;Audience&gt;

<Audience>audience-here</Audience>

or:

<Audience ref='variable-name-here'/>

Il criterio verifica che la dichiarazione del pubblico nel JWT corrisponda al valore specificato nel configurazione. Se non viene trovata una corrispondenza, il criterio genera un errore. Questa dichiarazione identifica i destinatari a cui è destinato il JWT. Questa è una delle rivendicazioni registrate menzionate in RFC7519.

Predefinita N/D
Presenza Facoltativo
Tipo Stringa
Valori validi Una stringa o una variabile di flusso che identifica il pubblico.

&lt;AdditionalClaims/Claim&gt;

<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'/>

Verifica che il payload JWT contenga le attestazioni aggiuntive specificate e che le i valori delle rivendicazioni dichiarate corrispondono.

Per un'altra dichiarazione viene utilizzato un nome che non fa parte dei nomi di attestazione JWT standard registrati. Il valore di una dichiarazione aggiuntiva può essere una stringa, un numero, un valore booleano, una mappa o un array. Una mappa è semplicemente un insieme di coppie nome/valore. È possibile specificare il valore di una rivendicazione di uno di questi tipi esplicitamente nella configurazione dei criteri o indirettamente tramite un riferimento a una variabile di flusso.

Predefinita N/D
Presenza Facoltativo
Tipo Stringa, numero, booleano o mappa
Array Impostato su true per indicare se il valore è un array di tipi. Valore predefinito: falso
Valori validi Qualsiasi valore che vuoi utilizzare per una rivendicazione aggiuntiva.

L'elemento <Claim> utilizza i seguenti attributi:

  • name - (Obbligatorio) Il nome della rivendicazione.
  • ref - (Facoltativo) Il nome di una variabile di flusso. Se presente, il criterio utilizzerà il valore di questo come la dichiarazione. Se vengono specificati sia un attributo ref sia un valore di dichiarazione esplicito, il valore esplicito è il valore predefinito e viene utilizzato se la variabile del flusso di riferimento non è risolta.
  • type: (facoltativo) uno dei seguenti: string (predefinito), numero, booleano o mappa
  • array - (Facoltativo) Imposta su true per indicare se il valore è un array di tipi. Valore predefinito: false.

Se includi l'elemento <Claim>, i nomi delle rivendicazioni vengono impostati in modo statico quando e configurare il criterio. In alternativa, puoi passare un oggetto JSON per specificare i nomi delle attestazioni. Poiché l'oggetto JSON viene passato come variabile, i nomi delle attestazioni vengono determinati in fase di esecuzione.

Ad esempio:

<AdditionalClaims ref='json_claims'/>

Dove la variabile json_claims contiene un oggetto JSON nel formato:

{
  "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 }
  }
}

&lt;AdditionalHeaders/Claim&gt;

<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>

Verifica che l'intestazione JWT contenga la coppia o le coppie nome/valore aggiuntive specificate e che i valori della rivendicazione dichiarata corrispondono.

Un'attestazione aggiuntiva utilizza un nome che non fa parte dei nomi di attestazione JWT standard registrati. Il valore di una dichiarazione aggiuntiva può essere una stringa, un numero, un valore booleano, una mappa o un array. Una mappa è semplicemente un insieme di coppie nome/valore. È possibile specificare il valore di una rivendicazione di uno di questi tipi esplicitamente nella configurazione dei criteri o indirettamente tramite un riferimento a una variabile di flusso.

Predefinita N/D
Presenza Facoltativo
Tipo

Stringa (predefinita), numero, booleano o mappa.

Se non viene specificato alcun tipo, il tipo è impostato su Stringa.

Array Impostato su true per indicare se il valore è un array di tipi. Valore predefinito: falso
Valori validi Qualsiasi valore che vuoi utilizzare per una rivendicazione aggiuntiva.

L'elemento <Claim> utilizza i seguenti attributi:

  • name - (Obbligatorio) Il nome della rivendicazione.
  • ref - (Facoltativo) Il nome di una variabile di flusso. Se presente, il criterio utilizzerà il valore di questo come la dichiarazione. Se vengono specificati sia un attributo ref sia un valore di dichiarazione esplicito, il valore esplicito è il valore predefinito e viene utilizzato se la variabile del flusso di riferimento non è risolta.
  • type: (facoltativo) uno dei seguenti: string (predefinito), numero, booleano o mappa
  • array - (Facoltativo) Imposta su true per indicare se il valore è un array di tipi. Valore predefinito: false.

&lt;CustomClaims&gt;

Nota: al momento, viene inserito un elemento CustomClaim quando aggiungi una nuova il criterio GeneraJWT tramite l'interfaccia utente. Questo elemento non è funzionale e viene ignorato. Il corretto invece è &lt;AdditionalClaims&gt;. UI verrà aggiornato per inserire gli elementi corretti in un secondo momento.

&lt;Id&gt;

<Id>explicit-jti-value-here</Id>
 -or-
<Id ref='variable-name-here'/>
 -or-
<Id/>

Verifica che il JWT presenti la dichiarazione jti specifica. Quando il valore di testo e ref sono entrambi vuoti, il criterio genererà un jti contenente un UUID casuale. ID JWT (jti) è un identificatore univoco del JWT. Per ulteriori informazioni su jti, consulta RFC7519.

Predefinita N/D
Presenza Facoltativo
Tipo Stringa o riferimento.
Valori validi Una stringa o il nome di una variabile di flusso contenente l'ID.

&lt;IgnoreCriticalHeaders&gt;

<IgnoreCriticalHeaders>true|false</IgnoreCriticalHeaders>

Impostalo su false se desideri che il criterio generi un errore quando qualsiasi intestazione elencata nel L'intestazione crit del JWT non è elencata nell'elemento <KnownHeaders>. Il valore viene impostato su true per fare in modo che il criterio VerifyJWT ignori l'intestazione crit.

Un motivo per impostare questo elemento su true è se ti trovi in un ambiente di test e non sei ancora pronto a causare un errore in un'intestazione mancante.

Predefinita falso
Presenza Facoltativo
Tipo Booleano
Valori validi true o false

&lt;IgnoreIssuedAt&gt;

<IgnoreIssuedAt>true|false</IgnoreIssuedAt>

Imposta il valore false (predefinito) se desideri che il criterio generi un errore quando un JWT contiene un token Rivendicazione di iat (inviata alle) che specifica un'ora futura. Se viene impostato su true, il criterio ignora iat durante la verifica.

Predefinita falso
Presenza Facoltativo
Tipo Booleano
Valori validi true o false

&lt;IgnoreUnresolvedVariables&gt;

<IgnoreUnresolvedVariables>true|false</IgnoreUnresolvedVariables>

Imposta il valore false se vuoi che il criterio generi un errore quando viene specificata una variabile di riferimento. del criterio non è risolvibile. Imposta il valore su true per trattare le variabili irrisolvibili come stringhe vuote (nullo).

Predefinita falso
Presenza Facoltativo
Tipo Booleano
Valori validi true o false

&lt;Issuer&gt;

<Issuer ref='variable-name-here'/>
<Issuer>issuer-string-here</Issuer>

Il criterio verifica che l'emittente nel JWT corrisponda alla stringa specificata nel di configurazione. Una dichiarazione che identifica l'emittente del JWT. Questo è uno dei insieme registrato di rivendicazioni menzionate in RFC7519.

Predefinita N/D
Presenza Facoltativo
Tipo Stringa o riferimento
Valori validi Qualsiasi

&lt;KnownHeaders&gt;

<KnownHeaders>a,b,c</KnownHeaders>

or:

<KnownHeaders ref=variable_containing_headers/>

Il criterio GenerateJWT utilizza l'elemento <CriticalHeaders> per compilare il crit in un JWT. Ad esempio:

{
  “typ: “...”,
  “alg” : “...”,
  “crit” : [ “a”, “b”, “c” ],
}

Il criterio VerifyJWT esamina l'intestazione crit nel JWT, se esistente, e per ogni intestazione elencata verifica che l'intestazione sia elencata anche nell'elemento <KnownHeaders>. La L'elemento <KnownHeaders> può contenere un soprainsieme di elementi elencati in crit. È solo necessario che tutte le intestazioni elencate in crit siano elencate nella sezione Elemento <KnownHeaders>. Qualsiasi intestazione che le norme trovano in crit che non è elencato anche in <KnownHeaders>, causa l'errore del criterio VerifyJWT.

Facoltativamente, puoi configurare il criterio VerifyJWT in modo da ignorare l'intestazione crit impostando l'elemento <IgnoreCriticalHeaders> su true.

Predefinita N/D
Presenza Facoltativo
Tipo Matrice di stringhe separate da virgole
Valori validi Una matrice o il nome di una variabile che contiene l'array.

&lt;PublicKey/Certificate&gt;

<PublicKey>
   <Certificate ref="signed_public.cert"/>
</PublicKey>
-or-
<PublicKey>
    <Certificate>
    -----BEGIN CERTIFICATE-----
    cert data
    -----END CERTIFICATE-----
    </Certificate>
</PublicKey>

Specifica il certificato firmato utilizzato per verificare la firma nel JWT. Utilizza l'attributo ref per Trasmettere il certificato firmato in una variabile di flusso o specificare direttamente il certificato con codifica PEM. Utilizzare solo se l'algoritmo è uno di RS256/RS384/RS512, PS256/PS384/PS512 o ES256/ES384/ES512.

Predefinita N/D
Presenza Per verificare un JWT firmato con un algoritmo RSA, devi utilizzare il certificato, JWKS oppure Elementi di valore.
Tipo Stringa
Valori validi Una stringa o una variabile di flusso.

&lt;PublicKey/JWKS&gt;

<!-- 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>

Specifica un valore nel formato JWKS (RFC 7517) contenente un set di chiavi pubbliche. Utilizzare solo se l'algoritmo è uno di RS256/RS384/RS512, PS256/PS384/PS512 o ES256/ES384/ES512.

Se il JWT in entrata porta un ID chiave presente nell'insieme JWKS, il criterio utilizzerà la chiave pubblica corretta per verificare la firma JWT. Per maggiori dettagli su questa funzione. Vedi Utilizzo di un set di chiavi web JSON (JWKS) per verificare un JWT.

Se recuperi il valore da un URL pubblico, Edge memorizza nella cache il JWKS per un periodo di 300 secondi. Quando la cache scade, Edge recupera di nuovo il JWKS.

Predefinita N/D
Presenza Per verificare un JWT utilizzando un algoritmo RSA, devi utilizzare il certificato, JWKS oppure Valore.
Tipo Stringa
Valori validi Una variabile di flusso, un valore stringa o un URL.

&lt;PublicKey/Value&gt;

<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>

Specifica la chiave pubblica o il certificato pubblico utilizzato per verificare la firma nel JWT. Utilizza l'attributo ref per passa la chiave/certificato in una variabile di flusso o specifica direttamente la chiave con codifica PEM. Da utilizzare solo se L'algoritmo è uno tra RS256/RS384/RS512, PS256/PS384/PS512 o ES256/ES384/ES512.

Predefinita N/D
Presenza Per verificare un JWT firmato con un algoritmo RSA, devi utilizzare il certificato, JWKS oppure Elementi di valore.
Tipo Stringa
Valori validi Una stringa o una variabile di flusso.

&lt;SecretKey/Value&gt;

<SecretKey encoding="base16|hex|base64|base64url">
  <Value ref="private.your-variable-name"/>
</SecretKey>

Fornisce la chiave segreta utilizzata per verificare o firmare i token con un algoritmo HMAC. Utilizza solo quando l'algoritmo è uno di HS256, HS384 o HS512.

Predefinita N/D
Presenza Obbligatorio per gli algoritmi HMAC.
Tipo Stringa
Valori validi

Per encoding, i valori validi sono hex, base16, base64, o base64url. I valori di codifica hex e base16 sono sinonimi.

Utilizza l'attributo ref per passare la chiave in una variabile di flusso.

Nota: se una variabile di flusso deve avere il prefisso "private". Ad esempio: private.mysecret

&lt;Source&gt;

<Source>jwt-variable</Source>

Se presente, specifica la variabile di flusso in cui il criterio prevede di trovare il JWT da verificare.

Predefinita request.header.authorization (vedi la nota sopra per informazioni importanti) sulle impostazioni predefinite).
Presenza Facoltativo
Tipo Stringa
Valori validi Il nome di una variabile di flusso perimetrale.

&lt;Subject&gt;

<Subject>subject-string-here</Subject>

Il criterio consente di verificare che il soggetto nel JWT corrisponda alla stringa specificata nel criterio. configurazione. Questa dichiarazione identifica o fa una dichiarazione in merito all'oggetto del JWT. Questo è uno degli insiemi di attestazioni standard menzionati in RFC7519.

Predefinita N/D
Presenza Facoltativo
Tipo Stringa
Valori validi Qualsiasi valore che identifica in modo univoco un soggetto.

&lt;TimeAllowance&gt;

<TimeAllowance>120s</TimeAllowance>

Il "periodo di tolleranza" per volte. Ad esempio, se il margine di tempo è configurato su 60 secondi, un JWT scaduto verrebbe considerato ancora valido per 60 secondi dalla data di scadenza dichiarata. La non prima della data verrà valutato in modo simile. Il valore predefinito è 0 secondi (nessun periodo di tolleranza).

Predefinita 0 secondi (nessun periodo di tolleranza)
Presenza Facoltativo
Tipo Stringa
Valori validi Un valore o un riferimento a una variabile di flusso contenente il valore. Gli intervalli di tempo possono essere specificato come segue:
  • s = secondi
  • m = minuti
  • h = ore
  • d = giorni

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.

Messaggi di errore

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.
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.
MissingNameForAdditionalClaim If the name of the claim is not specified in the child element <Claim> of the <AdditionalClaims> element, the deployment will fail.
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.
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.
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.
InvalidValueForElement If the value specified in the <Algorithm> element is not a supported value, the deployment will fail.
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.
InvalidKeyConfiguration If the child element <Value> is not defined in the <PrivateKey> or <SecretKey> elements, the deployment will fail.
EmptyElementForKeyConfiguration If the ref attribute of the child element <Value> of the <PrivateKey> or <SecretKey> elements is empty or unspecified, the deployment will fail.
InvalidConfigurationForVerify This error occurs if the <Id> element is defined within the <SecretKey> element.
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.
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.
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.

Variabili di errore

Queste variabili vengono impostate quando si verifica un errore di runtime. Per ulteriori informazioni, vedi Cosa devi sapere sugli errori relativi alle norme.

Variabili Dove Esempio
fault.name="fault_name" fault_name è il nome dell'errore, come elencato nella precedente tabella Errori di runtime. Il nome dell'errore è l'ultima parte del codice di errore. fault.name Matches "TokenExpired"
JWT.failed Tutti i criteri JWT impostano la stessa variabile in caso di errore. JWT.failed = true

Esempio di risposta di errore

Codici di errore dei criteri JWT

Per la gestione degli errori, la best practice è il trap della parte errorcode dell'errore la risposta corretta. Non fare affidamento sul testo in faultstring, perché potrebbe cambiare.

Esempio di regola di errore

    <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>