Stai visualizzando la documentazione di Apigee Edge.
Consulta la
documentazione di Apigee X. info
Calcola e verifica un codice HMAC (Hash-based Message Authentication Code). A volte noto come Keyed Message Authentication Code o Keyed hash, HMAC utilizza una funzione di hash crittografica come SHA-1, SHA-224, SHA-256, SHA-384, SHA-512 o MD-5, applicata a un "messaggio", insieme a una chiave segreta, per produrre una firma o un codice di autenticazione del messaggio su quel messaggio. Il termine "messaggio" qui si riferisce a qualsiasi flusso di byte. Un mittente di un messaggio può anche inviare un HMAC a un destinatario, e il destinatario può utilizzare l'HMAC per autenticare il messaggio.
Per saperne di più su HMAC, consulta HMAC: Keyed-Hashing per Message Authentication (rfc2104).
Esempi
Genera HMAC
<HMAC name='HMAC-1'> <Algorithm>SHA256</Algorithm> <SecretKey ref='private.secretkey'/> <IgnoreUnresolvedVariables>true|false</IgnoreUnresolvedVariables> <!-- optional --> <!-- The "message" can include fixed and multiple variable parts, including newlines and static functions. Whitespace is significant. --> <Message>Fixed Part {a_variable} {timeFormatUTCMs(timeFormatString1,system.timestamp)} {nonce} </Message> <!-- default encoding is base64 --> <Output encoding='base16'>name_of_variable</Output> </HMAC>
Verifica HMAC
<HMAC name='HMAC-1'> <Algorithm>SHA256</Algorithm> <SecretKey ref='private.secretkey'/> <IgnoreUnresolvedVariables>true|false</IgnoreUnresolvedVariables> <!-- optional --> <!-- The "message" can include fixed and multiple variable parts, including newlines and static functions. Whitespace is significant. --> <Message>Fixed Part {a_variable} {timeFormatUTCMs(timeFormatString1,system.timestamp)} {nonce} </Message> <!-- VerificationValue is optional. Include it to perform an HMAC check. --> <VerificationValue encoding='base16' ref='expected_hmac_value'/> <!-- default encoding is base64 --> <Output encoding='base16'>name_of_variable</Output> </HMAC>
Il calcolo di una firma e la verifica di questa firma seguono esattamente la stessa procedura. Il criterio HMAC calcola un HMAC e, facoltativamente, può verificare la firma calcolata rispetto a un valore previsto. L'elemento facoltativo VerificationValue (se presente) indica al criterio di confrontare il valore calcolato con un valore noto o fornito valore.
Riferimento agli elementi per HMAC
Il riferimento al criterio descrive gli elementi e gli attributi del criterio HMAC.
Attributi che si applicano all'elemento di primo livello
<HMAC name="HMAC" continueOnError="false" enabled="true" async="false">
I seguenti attributi sono comuni a tutti gli elementi principali dei criteri.
| Attributo | Descrizione | Predefinita | Presenza |
|---|---|---|---|
| nome |
Il nome interno del criterio. I caratteri che puoi utilizzare nel nome sono limitati a:
A-Z0-9._\-$ %. Tuttavia, la UI di Apigee applica ulteriori
restrizioni, ad esempio la rimozione automatica dei caratteri non alfanumerici.
Facoltativamente, utilizza l'elemento |
N/D | Obbligatorio |
| continueOnError |
Imposta su false per restituire un errore quando un criterio non riesce. Questo è il comportamento previsto
per la maggior parte dei criteri.
Imposta su |
false | Facoltativo |
| attivato |
Imposta su true per applicare il criterio.
Imposta su |
true | Facoltativo |
| asinc | Questo attributo è deprecato. | false | Deprecato |
<Algorithm>
<Algorithm>algorithm-name</Algorithm>
Specifica l'algoritmo di hash per calcolare l'HMAC.
| Predefinita | N/D |
| Presenza | Obbligatorio |
| Tipo | Stringa |
| Valori validi | SHA-1, SHA-224, SHA-256, SHA-384,
SHA-512, e MD-5
La configurazione del criterio accetta i nomi degli algoritmi senza distinguere tra maiuscole e minuscole e
con o senza il trattino tra lettere e numeri . Ad esempio, |
<DisplayName>
<DisplayName>Policy Display Name</DisplayName>
Utilizza questo attributo in aggiunta all'attributo name per etichettare il criterio nell'editor proxy della UI di Apigee 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 |
<Message>
<Message>message_template_here</Message> or <Message ref='variable_here'/>
Specifica il payload del messaggio da firmare. L'input di questo elemento supporta modelli di messaggio (sostituzione delle variabili) per consentire l'inclusione di elementi aggiuntivi in fase di runtime, come timestamp, nonces, elenchi di intestazioni o altre informazioni. Ad esempio:
<Message>Fixed Part {a_variable} {timeFormatUTCMs(timeFormatString1,system.timestamp)} {nonce} </Message>
Il modello di messaggio può includere parti fisse e variabili, tra cui nuove righe e funzioni statiche. Gli spazi vuoti sono significativi.
| Predefinita | N/D |
| Presenza | Obbligatorio |
| Tipo | Stringa |
| Valori validi | Qualsiasi stringa è valida per il valore di testo. Se fornisci un attributo ref,
avrà la precedenza sul valore di testo. Il criterio valuta il valore di testo
o la variabile a cui viene fatto riferimento come modello di messaggio. |
<Output>
<Output encoding='encoding_name'>variable_name</Output>
Specifica il nome della variabile che il criterio deve impostare con il valore HMAC calcolato. Specifica anche la codifica da utilizzare per l'output.
| Predefinita |
La variabile di output predefinita è Il valore predefinito dell'attributo |
| Presenza | Facoltativo. Se questo elemento non è presente, il criterio imposta la variabile di flusso
hmac.POLICYNAME.output, con un valore codificato in base64. |
| Tipo | Stringa |
| Valori validi | Per la codifica, I valori non fanno distinzione tra maiuscole e minuscole; Il valore di testo dell'elemento |
<SecretKey>
<SecretKey encoding='encoding_name' ref='private.secretkey'/>
Specifica la chiave segreta utilizzata per calcolare l'HMAC. La chiave viene ottenuta dalla variabile a cui viene fatto riferimento, decodificata in base alla codifica specifica.
| Predefinita |
Non esiste un valore predefinito per la variabile a cui viene fatto riferimento;
l'attributo In assenza di un attributo |
| Presenza | Obbligatorio |
| Tipo | Stringa |
| Valori validi | Per L'utilizzo di un attributo di codifica consente di specificare una chiave che include byte al di fuori dell'intervallo di caratteri stampabili UTF-8. Ad esempio, supponiamo che la configurazione del criterio includa quanto segue: <SecretKey encoding='hex' ref='private.encodedsecretkey'/>
Supponiamo che
In questo caso, i byte della chiave verranno decodificati come: [53 65 63 72 65 74 31 32 33]
(ogni byte rappresentato in esadecimale). Un altro esempio: se |
<VerificationValue>
<VerificationValue encoding='encoding_name' ref='variable_name'/> or <VerificationValue encoding='encoding_name'>string_value</VerificationValue>
(Facoltativo) Specifica il valore di verifica, nonché l'algoritmo di codifica utilizzato per codificare il valore di verifica. Il criterio utilizzerà questo algoritmo per decodificare il valore.
| Predefinita | Non esiste un valore di verifica predefinito. Se l'elemento è presente, ma l'
encoding è assente, il criterio utilizza una codifica predefinita di base64 |
| Presenza | Facoltativo |
| Tipo | Stringa |
| Valori validi |
I valori validi per l'attributo di codifica sono: La codifica di |
<IgnoreUnresolvedVariables>
<IgnoreUnresolvedVariables>true|false</IgnoreUnresolvedVariables>
Imposta su false se vuoi che il criterio generi un errore quando una variabile a cui viene fatto riferimento specificata
nel criterio non è risolvibile. Imposta su true per trattare qualsiasi variabile non risolvibile come una stringa vuota
(null).
Il valore booleano IgnoreUnresolvedVariables influisce solo sulle variabili a cui viene fatto riferimento dal
modello di messaggio. Sebbene SecretKey e VerificationValue possano fare riferimento a una variabile, entrambe
devono essere risolvibili, quindi l'impostazione ignore non si applica a queste.
| Predefinita | Falso |
| Presenza | Facoltativo |
| Tipo | Booleano |
| Valori validi | true o false |
Variabili di flusso
Il criterio può impostare queste variabili durante l'esecuzione.
| Variabile | Descrizione | Esempio |
|---|---|---|
hmac.policy_name.message |
Il criterio imposta questa variabile con il messaggio effettivo,
il risultato della valutazione del modello di messaggio specificato nell'elemento Message. |
hmac.HMAC-Policy.message = "Hello, World" |
hmac.policy_name.output |
Ottiene il risultato del
calcolo HMAC quando l'elemento Output non specifica un nome di variabile. |
hmac.HMAC-Policy.output = /yyRjydfP+fBHTwXFgc5AZhLAg2kwCri+e35girrGw4= |
hmac.policy_name.outputencoding |
Ottiene il nome della codifica di output. | hmac.HMAC-Policy.outputencoding = base64 |
Messaggi di errore
Questa sezione descrive i codici e i messaggi di errore che vengono restituiti e le variabili di errore impostate da Apigee 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.hmac.UnresolvedVariable |
401 | Questo errore si verifica se una variabile specificata nel criterio HMAC è:
|
steps.hmac.HmacVerificationFailed |
401 | Verifica HMAC non riuscita. Il valore di verifica fornito non corrisponde al valore calcolato. |
steps.hmac.HmacCalculationFailed |
401 | Il criterio non è stato in grado di calcolare l'HMAC. |
steps.hmac.EmptySecretKey |
401 | Il valore della variabile della chiave secret è vuoto. |
steps.hmac.EmptyVerificationValue |
401 | La variabile che contiene il valore di verifica è vuota. |
Errori di deployment
Questi errori possono verificarsi quando esegui il deployment di un proxy contenente questo criterio.
| Nome errore | Stato HTTP | Si verifica quando |
|---|---|---|
steps.hmac.MissingConfigurationElement |
401 | Questo errore si verifica quando manca un elemento o un attributo obbligatorio. |
steps.hmac.InvalidValueForElement |
401 | Questo errore si verifica se il valore specificato nell'elemento dell'algoritmo non è
uno dei seguenti valori: SHA-1, SHA-224, SHA-256,
SHA-512 o MD-5. |
steps.hmac.InvalidSecretInConfig |
401 | Questo errore si verifica se viene fornito esplicitamente un valore di testo per SecretKey. |
steps.hmac.InvalidVariableName |
401 | Questo errore si verifica se la variabile SecretKey non contiene il prefisso private (private.). |
Variabili di errore
Queste variabili vengono impostate quando si verifica un errore di runtime. Per ulteriori informazioni, consulta Informazioni importanti sugli errori relativi alle norme.
| Variabili | Dove | Esempio |
|---|---|---|
fault.name="fault_name" |
fault_name è il nome dell'errore, come indicato nella tabella Errori di runtime sopra. Il nome dell'errore è l'ultima parte del codice dell'errore. | fault.name Matches "UnresolvedVariable" |
hmac.policy_name.failed |
Il criterio imposta questa variabile in caso di errore. | hmac.HMAC-Policy.failed = true |
Esempio di risposta di errore
Per la gestione degli errori, la best practice è intercettare la parte errorcode della risposta
all'errore. Non fare affidamento sul testo in faultstring, perché potrebbe cambiare.
Esempio di regola di errore
<FaultRules>
<FaultRule name="HMAC Policy Errors">
<Step>
<Name>AM-Unauthorized</Name>
<Condition>(fault.name Matches "HmacVerificationFailed")</Condition>
</Step>
<Condition>hmac.HMAC-1.failed = true</Condition>
</FaultRule>
</FaultRules>