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 |
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
comportamento per la maggior parte dei criteri.
Imposta su |
falso | Facoltativo |
abilitata |
Imposta il valore su true per applicare il criterio.
Imposta su |
true | Facoltativo |
asinc | Questo attributo è obsoleto. | falso | Deprecato |
<DisplayName>
<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 |
<Algorithm>
<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 |
<Audience>
<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. |
<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 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 } } }
<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 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.
<CustomClaims>
Nota: attualmente, un elemento CustomClaim viene inserito quando aggiungi una nuova il criterio GeneraJWT tramite l'interfaccia utente. Questo elemento non è funzionale e viene ignorato. Il corretto invece è <AdditionalClaims>. UI verrà aggiornato 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 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. |
<IgnoreCriticalHeaders>
<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 |
<IgnoreIssuedAt>
<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 |
<IgnoreUnresolvedVariables>
<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 |
<Issuer>
<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 |
<KnownHeaders>
<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. |
<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 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. |
<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 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. |
<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 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 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. |
<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 è uno di 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 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 (vedi la nota sopra per informazioni importanti)
sulle impostazioni predefinite). |
Presenza | Facoltativo |
Tipo | Stringa |
Valori validi | Il nome di una variabile di flusso perimetrale. |
<Subject>
<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. |
<TimeAllowance>
<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:
|
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>