Stai visualizzando la documentazione di Apigee Edge.
Consulta la
documentazione di Apigee X. info
Cosa
Verifica la firma di un JWT ricevuto da client o altri sistemi. Queste norme estraggono anche le rivendicazioni in variabili di contesto in modo che le norme o le condizioni successive possano esaminare questi valori per prendere decisioni di autorizzazione o routing. Per un'introduzione dettagliata, consulta la panoramica dei criteri JWS e JWT.
Quando questo criterio viene eseguito, Edge verifica la firma di un JWT e che il JWT sia valido in base alle ore di scadenza e di inizio validità, se presenti. La norma può anche verificare facoltativamente i valori di rivendicazioni specifiche nel JWT, come il soggetto, l'emittente, il segmento di pubblico o il valore di rivendicazioni aggiuntive.
Se il JWT viene verificato e convalidato, tutte le rivendicazioni contenute al suo interno vengono estratte in variabili di contesto per l'utilizzo da parte di norme o condizioni successive e la richiesta può procedere. Se la firma JWT non può essere verificata o se il JWT non è valido a causa di uno dei timestamp, tutta l'elaborazione si interrompe e nella risposta viene restituito un errore.
Per informazioni 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 di un JWT.
Campioni
Verificare un JWT firmato con l'algoritmo HS256
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 qui sopra per un esempio completo, incluso come effettuare una richiesta relativa alle norme.
La configurazione del criterio 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 Origine), l'algoritmo di firma richiesto, dove trovare la chiave segreta (memorizzata in una variabile di flusso Edge, che potrebbe essere stata recuperata, ad esempio, da Edge KVM) e un insieme di rivendicazioni richieste 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 il suo output nelle variabili di contesto in modo che i criteri o le condizioni successivi nel proxy API possano esaminare questi valori. Consulta la sezione Variabili di flusso per un elenco delle variabili impostate da queste norme.
Verifica di un JWT firmato con l'algoritmo RS256
Questa policy di esempio verifica un JWT firmato con l'algoritmo RS256. Per la verifica,
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 qui sopra per un esempio completo, incluso come effettuare una richiesta relativa alle norme.
Per informazioni dettagliate sui requisiti e sulle opzioni per ogni elemento di questo criterio di esempio, consulta la documentazione di riferimento sugli elementi.
<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."
}… verrà considerata valida se la firma può essere verificata con la chiave pubblica fornita.
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."
}… verrà considerato non valido, anche se la firma può essere verificata, perché l'attestazione "sub" inclusa nel JWT non corrisponde al valore richiesto dell'elemento "Subject" come specificato nella configurazione delle norme.
Il criterio scrive il suo output nelle variabili di contesto in modo che i criteri o le condizioni successivi nel proxy API possano esaminare questi valori. Consulta la sezione Variabili di flusso per un elenco delle variabili impostate da queste norme.
Impostazione degli elementi chiave
Gli elementi che utilizzi per specificare la chiave utilizzata per verificare il JWT dipendono dall'algoritmo scelto, come mostrato nella seguente tabella:
| 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 saperne di più sui requisiti delle chiavi, consulta Informazioni sugli algoritmi di crittografia della firma. | ||
Riferimento elemento
Il riferimento al criterio descrive gli elementi e gli attributi del criterio Verifica JWT.
Nota: la configurazione varia leggermente a seconda dell'algoritmo di crittografia utilizzato. Consulta gli esempi per visualizzare configurazioni per casi d'uso specifici.
Attributi che si applicano all'elemento di primo livello
<VerifyJWT name="JWT" continueOnError="false" enabled="true" async="false">
I seguenti attributi sono comuni a tutti gli elementi principali delle policy.
| Attributo | Descrizione | Predefinita | Presenza |
|---|---|---|---|
| nome |
Il nome interno della policy. I caratteri che puoi utilizzare nel nome sono limitati a:
A-Z0-9._\-$ %. Tuttavia, la UI di gestione di Edge impone ulteriori
limitazioni, ad esempio la rimozione automatica dei caratteri non alfanumerici.
Se vuoi, utilizza l'elemento |
N/D | Obbligatorio |
| continueOnError |
Imposta false per restituire un errore quando una policy non va a buon fine. Questo è il comportamento
previsto per la maggior parte delle norme.
Imposta su |
false | Facoltativo |
| attivato |
Imposta su true per applicare la policy.
Imposta |
true | Facoltativo |
| asinc | Questo attributo è stato ritirato. | false | Deprecato |
<DisplayName>
<DisplayName>Policy Display Name</DisplayName>
Utilizza questo attributo 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 name del criterio. |
| Presenza | Facoltativo |
| Tipo | Stringa |
<Algorithm>
<Algorithm>HS256</Algorithm>
Specifica l'algoritmo di crittografia per firmare il token. Gli algoritmi RS*/PS*/ES* utilizzano una coppia di chiavi pubblica/segreta, mentre gli algoritmi HS* utilizzano 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 puoi combinare gli algoritmi HS* con altri o gli algoritmi ES* con altri perché richiedono un tipo di chiave specifico. Puoi combinare gli algoritmi RS* e PS*.
| Predefinita | N/D |
| Presenza | Obbligatorio |
| Tipo | Stringa di valori separati da virgola |
| Valori validi | HS256, HS384, HS512, RS256, RS384, RS512, ES256, ES384, ES512, PS256, PS384, PS512 |
<Audience>
<Audience>audience-here</Audience> or: <Audience ref='variable-name-here'/>
Il criterio verifica che l'attestazione del pubblico nel JWT corrisponda al valore specificato nella configurazione. Se non viene trovata alcuna corrispondenza, la norma genera un errore. Questa rivendicazione identifica i destinatari a cui è destinato il JWT. Si tratta di una delle rivendicazioni registrate menzionate nella RFC7519.
| Predefinita | N/D |
| Presenza | Facoltativo |
| Tipo | Stringa |
| Valori validi | Una variabile di flusso o una stringa che identifica il pubblico. |
<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'/>
Verifica che il payload JWT contenga le rivendicazioni aggiuntive specificate e che i valori delle rivendicazioni asserite corrispondano.
Un'attestazione aggiuntiva utilizza un nome che non è uno dei nomi delle attestazioni JWT standard registrate. Il valore di un'ulteriore rivendicazione può essere una stringa, un numero, un valore booleano, una mappa o un array. Una mappa è semplicemente un insieme di coppie nome/valore. Il valore di un'attestazione di uno di questi tipi può essere specificato in modo esplicito nella configurazione del criterio o indirettamente tramite un riferimento a una variabile di flusso.
| Predefinita | N/D |
| Presenza | Facoltativo |
| Tipo | Stringa, numero, valore booleano o mappa |
| Array | Imposta su true per indicare se il valore è un array di tipi. Valore predefinito: false |
| Valori validi | Qualsiasi valore che vuoi utilizzare per un'ulteriore rivendicazione. |
L'elemento <Claim> prevede i seguenti attributi:
- name: (obbligatorio) il nome della richiesta.
- ref: (facoltativo) il nome di una variabile di flusso. Se presente, il criterio utilizzerà il valore di questa variabile come rivendicazione. Se vengono specificati sia un attributo ref sia un valore di rivendicazione esplicito, il valore esplicito è quello predefinito e viene utilizzato se la variabile di flusso a cui viene fatto riferimento non viene risolta.
- type: (facoltativo) uno dei seguenti valori: stringa (impostazione predefinita), numero, booleano o mappa
- array: (facoltativo) impostalo su true per indicare se il valore è un array di tipi. Valore predefinito: false.
Quando includi l'elemento <Claim>, i nomi delle rivendicazioni vengono impostati in modo statico quando
configuri la policy. In alternativa, puoi passare un oggetto JSON per specificare i nomi delle rivendicazioni.
Poiché l'oggetto JSON viene passato come variabile, i nomi delle attestazioni vengono determinati in fase di runtime.
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 } } }
<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>
Verifica che l'intestazione JWT contenga le coppie nome/valore di rivendicazione aggiuntive specificate e che i valori delle rivendicazioni asserite corrispondano.
Un'attestazione aggiuntiva utilizza un nome che non è uno dei nomi standard e registrati delle attestazioni JWT. Il valore di un'ulteriore rivendicazione può essere una stringa, un numero, un valore booleano, una mappa o un array. Una mappa è semplicemente un insieme di coppie nome/valore. Il valore di un'attestazione di uno di questi tipi può essere specificato in modo esplicito nella configurazione del criterio o indirettamente tramite un riferimento a una variabile di flusso.
| Predefinita | N/D |
| Presenza | Facoltativo |
| Tipo |
Stringa (impostazione predefinita), numero, valore booleano o mappa. Se non viene specificato alcun tipo, il tipo predefinito è Stringa. |
| Array | Imposta su true per indicare se il valore è un array di tipi. Valore predefinito: false |
| Valori validi | Qualsiasi valore che vuoi utilizzare per un'ulteriore rivendicazione. |
L'elemento <Claim> prevede i seguenti attributi:
- name: (obbligatorio) il nome della richiesta.
- ref: (facoltativo) il nome di una variabile di flusso. Se presente, il criterio utilizzerà il valore di questa variabile come rivendicazione. Se vengono specificati sia un attributo ref sia un valore di rivendicazione esplicito, il valore esplicito è quello predefinito e viene utilizzato se la variabile di flusso a cui viene fatto riferimento non viene risolta.
- type: (facoltativo) uno dei seguenti valori: stringa (impostazione predefinita), numero, booleano o mappa
- array: (facoltativo) impostalo su true per indicare se il valore è un array di tipi. Valore predefinito: false.
<CustomClaims>
Nota:al momento, viene inserito un elemento CustomClaims quando aggiungi un nuovo criterio GenerateJWT tramite la UI. Questo elemento non è funzionale e viene ignorato. L'elemento corretto da utilizzare è <AdditionalClaims>. L'interfaccia utente verrà aggiornata per inserire gli elementi corretti in un secondo momento.
<Id>
<Id>explicit-jti-value-here</Id> -or- <Id ref='variable-name-here'/> -or- <Id/>
Verifica che il JWT contenga l'attestazione jti specifica. Quando il valore di testo e l'attributo ref sono entrambi vuoti, il criterio genererà un jti contenente un UUID casuale. L'attestazione JWT ID (jti) è un identificatore univoco per il JWT. Per saperne di più 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. |
<IgnoreCriticalHeaders>
<IgnoreCriticalHeaders>true|false</IgnoreCriticalHeaders>
Imposta il valore su false se vuoi che il criterio generi un errore quando un'intestazione elencata nell'intestazione crit del JWT non è elencata nell'elemento <KnownHeaders>.
Imposta 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 | false |
| Presenza | Facoltativo |
| Tipo | Booleano |
| Valori validi | true o false |
<IgnoreIssuedAt>
<IgnoreIssuedAt>true|false</IgnoreIssuedAt>
Imposta il valore su false (impostazione predefinita) se vuoi che il criterio generi un errore quando un JWT contiene un
attributo iat (Emesso il) che specifica un orario futuro.
Imposta su true per fare in modo che il criterio ignori iat durante la verifica.
| Predefinita | false |
| Presenza | Facoltativo |
| Tipo | Booleano |
| Valori validi | true o false |
<IgnoreUnresolvedVariables>
<IgnoreUnresolvedVariables>true|false</IgnoreUnresolvedVariables>
Imposta su false se vuoi che il criterio generi un errore quando qualsiasi variabile a cui viene fatto riferimento specificata nel criterio non è risolvibile. Imposta su true per considerare qualsiasi variabile non risolvibile come una stringa vuota (null).
| Predefinita | false |
| Presenza | Facoltativo |
| Tipo | Booleano |
| Valori validi | true o false |
<Issuer>
<Issuer ref='variable-name-here'/> <Issuer>issuer-string-here</Issuer>
I criteri verificano che l'emittente nel JWT corrisponda alla stringa specificata nell'elemento di configurazione. Un'affermazione che identifica l'emittente del JWT. Si tratta di uno dei set di rivendicazioni registrate menzionate nella RFC7519.
| Predefinita | N/D |
| Presenza | Facoltativo |
| Tipo | Stringa o riferimento |
| Valori validi | Qualsiasi |
<KnownHeaders>
<KnownHeaders>a,b,c</KnownHeaders> or: <KnownHeaders ref=’variable_containing_headers’/>
La norma GenerateJWT utilizza l'elemento <CriticalHeaders> per compilare l'intestazione
crit in un JWT. Ad esempio:
{
“typ: “...”,
“alg” : “...”,
“crit” : [ “a”, “b”, “c” ],
}Il criterio VerifyJWT esamina l'intestazione crit nel JWT, se presente, e per ogni intestazione elencata
verifica che anche l'elemento <KnownHeaders> elenchi l'intestazione. L'elemento
<KnownHeaders> può contenere un superset degli elementi elencati in crit.
È necessario solo che tutte le intestazioni elencate in crit siano elencate nell'elemento
<KnownHeaders>. Qualsiasi intestazione trovata dal criterio in crit
che non è elencata anche in <KnownHeaders> causa l'errore del criterio VerifyJWT.
Se vuoi, puoi configurare il criterio VerifyJWT in modo che ignori l'intestazione crit impostando l'elemento <IgnoreCriticalHeaders> su true.
| Predefinita | N/D |
| Presenza | Facoltativo |
| Tipo | Array di stringhe separate da virgole |
| Valori validi | Un array o il nome di una variabile contenente l'array. |
<PublicKey/Certificate>
<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 sul JWT. Utilizza l'attributo ref per trasferire il certificato firmato in una variabile di flusso o specificare direttamente il certificato con codifica PEM. Utilizza solo quando l'algoritmo è 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 gli elementi Certificate, JWKS o Value. |
| Tipo | Stringa |
| Valori validi | Una variabile di flusso o una stringa. |
<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>
Specifica un valore in formato JWKS (RFC 7517) contenente un insieme di chiavi pubbliche. Utilizzare solo quando l'algoritmo è RS256/RS384/RS512, PS256/PS384/PS512 o ES256/ES384/ES512.
Se il JWT in entrata contiene un ID chiave presente nel set di JWKS, il criterio utilizzerà la chiave pubblica corretta per verificare la firma JWT. Per informazioni dettagliate su questa funzionalità, consulta 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 nuovamente il JWKS.
| Predefinita | N/D |
| Presenza | Per verificare un JWT utilizzando un algoritmo RSA, devi utilizzare l'elemento Certificato, JWKS o Valore. |
| Tipo | Stringa |
| Valori validi | Una variabile di flusso, un valore stringa o un 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>
Specifica la chiave pubblica o il certificato pubblico utilizzato per verificare la firma sul JWT. Utilizza l'attributo ref per trasferire la chiave/il certificato in una variabile di flusso o specificare direttamente la chiave con codifica PEM. Utilizzare solo quando l'algoritmo è 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 gli elementi Certificate, JWKS o Value. |
| Tipo | Stringa |
| Valori validi | Una variabile di flusso o una stringa. |
<SecretKey/Value>
<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 è HS256, HS384 o HS512..
| Predefinita | N/D |
| Presenza | Obbligatorio per gli algoritmi HMAC. |
| Tipo | Stringa |
| Valori validi |
Per Utilizza l'attributo ref per passare la chiave in una variabile di flusso. Nota: se si tratta di una variabile di flusso, deve avere il prefisso "private". Ad esempio,
|
<Source>
<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 (per informazioni importanti sull'impostazione predefinita, consulta la nota riportata sopra). |
| Presenza | Facoltativo |
| Tipo | Stringa |
| Valori validi | Il nome di una variabile di flusso Edge. |
<Subject>
<Subject>subject-string-here</Subject>
Il criterio verifica che il soggetto nel JWT corrisponda alla stringa specificata nella configurazione del criterio. Questa rivendicazione identifica o fa un'affermazione sull'oggetto del JWT. Si tratta di uno dei set di standard menzionati nella RFC7519.
| Predefinita | N/D |
| Presenza | Facoltativo |
| Tipo | Stringa |
| Valori validi | Qualsiasi valore che identifichi in modo univoco un soggetto. |
<TimeAllowance>
<TimeAllowance>120s</TimeAllowance>
Il "periodo di tolleranza" per gli orari. Ad esempio, se il tempo consentito è configurato su 60 secondi, un JWT scaduto verrà considerato ancora valido per 60 secondi dopo la scadenza dichiarata. Il not-before-time 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 specificati come segue:
|
Variabili di flusso
Se l'operazione riesce, i criteri Verify JWT (Verifica JWT) e Decode JWT (Decodifica JWT) sono stati impostati. variabili di contesto in base a questo pattern:
jwt.{policy_name}.{variable_name}
Ad esempio, se il nome del criterio è jwt-parse-token , il criterio archivierà
l'oggetto specificato nel JWT alla variabile di contesto denominata jwt.jwt-parse-token.decoded.claim.sub.
Per la compatibilità con le versioni precedenti, sarà disponibile anche in jwt.jwt-parse-token.claim.subject.
| Nome variabile | Descrizione |
|---|---|
claim.audience |
L'affermazione del pubblico JWT. Questo valore può essere una stringa o un array di stringhe. |
claim.expiry |
Data e ora di scadenza, espresse in millisecondi dall'epoca. |
claim.issuedat |
La data di emissione del token, espressa in millisecondi dall'epoca. |
claim.issuer |
La rivendicazione dell'emittente JWT. |
claim.notbefore |
Se il JWT include un'attestazione nbf, questa variabile conterrà il valore, espresso in millisecondi dall'epoca. |
claim.subject |
L'affermazione del soggetto JWT. |
claim.name |
Il valore dell'attestazione denominata (standard o aggiuntiva) nel payload. Una di queste sarà impostata su ogni richiesta nel payload. |
decoded.claim.name |
Il valore analizzabile in JSON della dichiarazione denominata (standard o aggiuntiva) nel payload. È impostata una variabile per
ogni richiesta nel payload. Ad esempio, puoi utilizzare decoded.claim.iat per
recupera il valore emesso al momento del JWT, espresso in secondi dall'epoca. Mentre
puoi anche usare le variabili di flusso claim.name, queste sono
variabile consigliata per accedere a una rivendicazione. |
decoded.header.name |
Il valore analizzabile in JSON di un'intestazione nel payload. È impostata una variabile per
ogni intestazione nel payload. Puoi usare anche le variabili di flusso header.name,
questa è la variabile consigliata per accedere a un'intestazione. |
expiry_formatted |
Data e ora di scadenza, formattate come stringa leggibile. Esempio: 2017-09-28T21:30:45.000+0000 |
header.algorithm |
L'algoritmo di firma utilizzato nel JWT. Ad esempio, RS256, HS384 e così via. Per saperne di più, consulta Parametro intestazione(algoritmo). |
header.kid |
L'ID della chiave, se aggiunto al momento della generazione del JWT. Consulta anche la sezione "Utilizzo di un set di chiavi web JSON (JWKS)" presso JWT panoramica dei criteri per verificare un JWT. Per saperne di più, consulta Parametro intestazione(ID chiave). |
header.type |
Verrà impostato su JWT. |
header.name |
Il valore dell'intestazione denominata (standard o aggiuntiva). Una di queste sarà impostata su ogni intestazione aggiuntiva nella parte di intestazione del JWT. |
header-json |
L'intestazione in formato JSON. |
is_expired |
true o false |
payload-claim-names |
Un array di attestazioni supportate dal JWT. |
payload-json |
Il payload in formato JSON.
|
seconds_remaining |
Il numero di secondi prima della scadenza del token. Se il token è scaduto, sarà negativo. |
time_remaining_formatted |
Il tempo rimanente prima della scadenza del token, formattato come stringa leggibile. Esempio: 00:59:59.926 |
valid |
Nel caso di VerifyJWT, questa variabile sarà true quando la firma verrà verificata e
l'ora corrente è precedente alla scadenza del token e dopo il valore notBefore del token, se
sono presenti. In caso contrario, è false.
Nel caso di DecodeJWT, questa variabile non è impostata. |
Messaggi di errore
Questa sezione descrive i codici e i messaggi di errore restituiti e le variabili di errore impostate da Edge quando questo criterio attiva un errore. Queste informazioni sono importanti per sapere se si stanno sviluppando regole di errore per gestire gli errori. Per scoprire di più, consulta gli articoli Cosa devi sapere sugli errori relativi alle norme e Gestione degli errori.
Errori di runtime
Questi errori possono verificarsi quando il criterio viene eseguito.
| Codice di errore | Stato HTTP | Si verifica quando |
|---|---|---|
steps.jwt.AlgorithmInTokenNotPresentInConfiguration |
401 | Si verifica quando il criterio di verifica ha più algoritmi. |
steps.jwt.AlgorithmMismatch |
401 | L'algoritmo specificato nel criterio di generazione non corrisponde a quello previsto nel criterio di verifica. Gli algoritmi specificati devono corrispondere. |
steps.jwt.FailedToDecode |
401 | Il criterio non è stato in grado di decodificare il JWT. Il JWT potrebbe essere danneggiato. |
steps.jwt.GenerationFailed |
401 | Il criterio non è stato in grado di generare il JWT. |
steps.jwt.InsufficientKeyLength |
401 | Per una chiave di dimensioni inferiori a 32 byte per l'algoritmo HS256, a meno di 48 byte per l'algoritmo HS386 e a meno di 64 byte per l'algoritmo HS512. |
steps.jwt.InvalidClaim |
401 | Per una rivendicazione mancante o mancata corrispondenza di una rivendicazione oppure una mancata corrispondenza di intestazione o intestazione. |
steps.jwt.InvalidCurve |
401 | La curva specificata dalla chiave non è valida per l'algoritmo Curva ellittica. |
steps.jwt.InvalidJsonFormat |
401 | JSON non valido trovato nell'intestazione o nel payload. |
steps.jwt.InvalidToken |
401 | Questo errore si verifica quando la verifica della firma JWT non va a buon fine. |
steps.jwt.JwtAudienceMismatch |
401 | La rivendicazione del segmento di pubblico non è riuscita alla verifica del token. |
steps.jwt.JwtIssuerMismatch |
401 | La rivendicazione dell'emittente non è andata a buon fine durante la verifica del token. |
steps.jwt.JwtSubjectMismatch |
401 | La rivendicazione dell'oggetto non è andata a buon fine durante la verifica del token. |
steps.jwt.KeyIdMissing |
401 | Il criterio di verifica utilizza un JWKS come origine per le chiavi pubbliche, ma il JWT firmato non include una proprietà kid nell'intestazione. |
steps.jwt.KeyParsingFailed |
401 | Impossibile analizzare la chiave pubblica a partire dalle informazioni sulla chiave specificate. |
steps.jwt.NoAlgorithmFoundInHeader |
401 | Si verifica quando il JWT non contiene un'intestazione dell'algoritmo. |
steps.jwt.NoMatchingPublicKey |
401 | Il criterio di verifica utilizza un JWKS come origine per le chiavi pubbliche, ma il kid nel JWT firmato non è elencato nel JWKS. |
steps.jwt.SigningFailed |
401 | In CreateJWT, per una chiave inferiore alla dimensione minima per gli algoritmi HS384 o HS512 |
steps.jwt.TokenExpired |
401 | Il criterio tenta di verificare un token scaduto. |
steps.jwt.TokenNotYetValid |
401 | Il token non è ancora valido. |
steps.jwt.UnhandledCriticalHeader |
401 | Un'intestazione trovata dal criterio JWT di verifica nell'intestazione crit non è
elencata in KnownHeaders. |
steps.jwt.UnknownException |
401 | Si è verificata un'eccezione sconosciuta. |
steps.jwt.WrongKeyType |
401 | Tipo di chiave specificato errato. Ad esempio, se specifichi una chiave RSA per un algoritmo Elliptic Curve o una chiave curva per un algoritmo RSA. |
Errori di deployment
Questi errori possono verificarsi quando esegui il deployment di un proxy contenente questo criterio.
| Nome errore | Causa | Correggi |
|---|---|---|
InvalidNameForAdditionalClaim |
Il deployment non andrà a buon fine se la dichiarazione utilizzata nell'elemento secondario <Claim>
dell'elemento <AdditionalClaims> è uno dei seguenti nomi registrati:
kid, iss, sub, aud, iat,
exp, nbf o jti.
|
build |
InvalidTypeForAdditionalClaim |
Se la dichiarazione utilizzata nell'elemento secondario <Claim>
dell'elemento <AdditionalClaims> non è di tipo string, number,
boolean o map, il deployment non andrà a buon fine.
|
build |
MissingNameForAdditionalClaim |
Se il nome della richiesta non è specificato nell'elemento secondario <Claim>
dell'elemento <AdditionalClaims>, il deployment non andrà a buon fine.
|
build |
InvalidNameForAdditionalHeader |
Questo errore si verifica quando il nome dell'attestazione utilizzata nell'elemento secondario <Claim>
dell'elemento <AdditionalClaims> è alg o typ.
|
build |
InvalidTypeForAdditionalHeader |
Se il tipo di attestazione utilizzato nell'elemento secondario <Claim>
dell'elemento <AdditionalClaims> non è di tipo string, number,
boolean o map, il deployment non andrà a buon fine.
|
build |
InvalidValueOfArrayAttribute |
Questo errore si verifica quando il valore dell'attributo array nell'elemento secondario <Claim>
dell'elemento <AdditionalClaims> non è impostato su true o false.
|
build |
InvalidValueForElement |
Se il valore specificato nell'elemento <Algorithm> non è supportato, il deployment non andrà a buon fine.
|
build |
MissingConfigurationElement |
Questo errore si verifica se l'elemento <PrivateKey> non viene utilizzato con gli algoritmi della famiglia RSA o se l'elemento <SecretKey> non viene utilizzato con gli algoritmi della famiglia HS.
|
build |
InvalidKeyConfiguration |
Se l'elemento secondario <Value> non è definito negli elementi <PrivateKey> o <SecretKey>, il deployment non andrà a buon fine.
|
build |
EmptyElementForKeyConfiguration |
Se l'attributo ref dell'elemento secondario <Value> degli elementi <PrivateKey> o <SecretKey> è vuoto o non specificato, il deployment non andrà a buon fine.
|
build |
InvalidConfigurationForVerify |
Questo errore si verifica se l'elemento <Id> viene definito all'interno
dell'elemento <SecretKey>.
|
build |
InvalidEmptyElement |
Questo errore si verifica se l'elemento <Source> del criterio JWT di verifica è vuoto. Se presente, deve essere definita con un nome per la variabile di flusso perimetrale.
|
build |
InvalidPublicKeyValue |
Se il valore utilizzato nell'elemento secondario <JWKS> dell'elemento <PublicKey> non ha un formato valido, come specificato in RFC 7517, il deployment non andrà a buon fine.
|
build |
InvalidConfigurationForActionAndAlgorithm |
Se l'elemento <PrivateKey> viene utilizzato con gli algoritmi della famiglia HS o l'elemento <SecretKey> con gli algoritmi della famiglia RSA, il deployment non andrà a buon fine.
|
build |
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
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>