Anda sedang melihat dokumentasi Apigee Edge.
Buka dokumentasi
Apigee X. info
Menghitung dan memverifikasi Hash-based Message Authentication Code (HMAC). Terkadang dikenal sebagai Keyed Message Authentication Code atau Keyed hash, HMAC menggunakan fungsi hash kriptografi seperti SHA-1, SHA-224, SHA-256, SHA-384, SHA-512, atau MD-5, yang diterapkan ke "pesan", bersama dengan kunci rahasia, untuk menghasilkan tanda tangan atau kode autentikasi pesan pada pesan tersebut. Istilah "pesan" di sini merujuk pada aliran byte apa pun. Pengirim pesan juga dapat mengirim HMAC ke penerima, dan penerima dapat menggunakan HMAC untuk mengautentikasi pesan.
Untuk mempelajari HMAC lebih lanjut, lihat HMAC: Keyed-Hashing for Message Authentication (rfc2104).
Contoh
Membuat 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>
Verifikasi 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>
Penghitungan tanda tangan dan verifikasi tanda tangan tersebut mengikuti proses yang sama persis. Kebijakan HMAC menghitung HMAC, dan secara opsional dapat memverifikasi tanda tangan yang dihitung terhadap nilai yang diharapkan. Elemen VerificationValue opsional (jika ada) mengarahkan kebijakan untuk memeriksa nilai yang dihitung terhadap nilai yang diketahui atau diberikan.
Referensi elemen untuk HMAC
Referensi kebijakan menjelaskan elemen dan atribut kebijakan HMAC.
Atribut yang diterapkan ke elemen tingkat teratas
<HMAC name="HMAC" continueOnError="false" enabled="true" async="false">
Atribut berikut bersifat umum untuk semua elemen induk kebijakan.
| Atribut | Deskripsi | Default | Kehadiran |
|---|---|---|---|
| nama |
Nama internal kebijakan. Karakter yang dapat Anda gunakan dalam nama dibatasi untuk:
A-Z0-9._\-$ %. Namun, UI Apigee menerapkan batasan tambahan, seperti menghapus karakter yang bukan alfanumerik secara otomatis.
Secara opsional, gunakan elemen |
T/A | Wajib |
| continueOnError |
Setel ke false untuk menampilkan error saat kebijakan gagal. Hal ini adalah perilaku yang diharapkan untuk sebagian besar kebijakan.
Setel ke |
false | Opsional |
| diaktifkan |
Setel ke true untuk menerapkan kebijakan.
Setel ke |
true | Opsional |
| asinkron | Atribut ini tidak digunakan lagi. | false | Tidak digunakan lagi |
<Algorithm>
<Algorithm>algorithm-name</Algorithm>
Menentukan algoritma hash untuk menghitung HMAC.
| Default | T/A |
| Kehadiran | Wajib |
| Jenis | String |
| Nilai yang valid | SHA-1, SHA-224, SHA-256, SHA-384,
SHA-512, dan MD-5
Konfigurasi kebijakan menerima nama algoritma tanpa membedakan huruf besar/kecil, dan
dengan atau tanpa tanda hubung di antara huruf dan angka . Misalnya, |
<DisplayName>
<DisplayName>Policy Display Name</DisplayName>
Gunakan selain atribut nama untuk memberi label kebijakan di editor proxy UI Apigee dengan nama bahasa alami yang berbeda.
| Default | Jika Anda menghapus elemen ini, nilai atribut nama kebijakan akan digunakan. |
| Kehadiran | Opsional |
| Jenis | String |
<Message>
<Message>message_template_here</Message> or <Message ref='variable_here'/>
Menentukan payload pesan yang akan ditandatangani. Input elemen ini mendukung template pesan (penggantian variabel) untuk memungkinkan item tambahan disertakan saat runtime, seperti stempel waktu, nonce, daftar header, atau informasi lainnya. Contoh:
<Message>Fixed Part {a_variable} {timeFormatUTCMs(timeFormatString1,system.timestamp)} {nonce} </Message>
Template pesan dapat mencakup bagian tetap dan variabel, termasuk baris baru dan fungsi statis. Spasi kosong penting.
| Default | T/A |
| Kehadiran | Wajib |
| Jenis | String |
| Nilai yang valid | String apa pun valid untuk nilai teks. Jika Anda memberikan atribut ref,
atribut tersebut akan lebih diutamakan daripada nilai teks. Kebijakan mengevaluasi nilai teks atau variabel yang dirujuk sebagai template pesan. |
<Output>
<Output encoding='encoding_name'>variable_name</Output>
Menentukan nama variabel yang harus ditetapkan kebijakan dengan nilai HMAC yang dihitung. Juga menentukan encoding yang akan digunakan untuk output.
| Default |
Variabel output default adalah Nilai default untuk atribut |
| Kehadiran | Opsional. Jika elemen ini tidak ada, kebijakan akan menetapkan variabel alur
hmac.POLICYNAME.output, dengan nilai yang dienkode base64. |
| Jenis | String |
| Nilai yang valid | Untuk encoding, Nilai ini tidak peka huruf besar/kecil; Nilai teks elemen |
<SecretKey>
<SecretKey encoding='encoding_name' ref='private.secretkey'/>
Menentukan kunci rahasia yang digunakan untuk menghitung HMAC. Kunci diperoleh dari variabel yang dirujuk, didekode sesuai dengan encoding tertentu.
| Default |
Tidak ada nilai default untuk variabel yang dirujuk;
atribut Jika tidak ada atribut |
| Kehadiran | Wajib |
| Jenis | String |
| Nilai yang valid | Untuk Dengan atribut encoding, Anda dapat menentukan kunci yang mencakup byte di luar rentang karakter yang dapat dicetak UTF-8. Misalnya, konfigurasi kebijakan mencakup hal berikut: <SecretKey encoding='hex' ref='private.encodedsecretkey'/>
Misalkan
Dalam hal ini, byte kunci akan didekodekan sebagai: [53 65 63 72 65 74 31 32 33]
(setiap byte ditampilkan dalam hex). Sebagai contoh lain, jika |
<VerificationValue>
<VerificationValue encoding='encoding_name' ref='variable_name'/> or <VerificationValue encoding='encoding_name'>string_value</VerificationValue>
(Opsional) Menentukan nilai verifikasi, serta algoritma encoding yang digunakan untuk mengenkode nilai verifikasi. Kebijakan akan menggunakan algoritma ini untuk mendekode nilai.
| Default | Tidak ada nilai verifikasi default. Jika elemen ada, tetapi atribut
encoding tidak ada, kebijakan akan menggunakan encoding default base64 |
| Kehadiran | Opsional |
| Jenis | String |
| Nilai yang valid |
Nilai yang valid untuk atribut encoding adalah: Encoding |
<IgnoreUnresolvedVariables>
<IgnoreUnresolvedVariables>true|false</IgnoreUnresolvedVariables>
Setel ke false jika Anda ingin kebijakan menampilkan error saat variabel yang dirujuk yang ditentukan dalam kebijakan tidak dapat diselesaikan. Setel ke true untuk memperlakukan variabel yang tidak dapat diselesaikan sebagai string kosong
(null).
Boolean IgnoreUnresolvedVariables hanya memengaruhi variabel yang dirujuk oleh
template pesan. Meskipun SecretKey dan VerificationValue dapat mereferensikan variabel, keduanya
harus dapat diselesaikan, sehingga setelan ignore tidak berlaku untuk keduanya.
| Default | Salah |
| Kehadiran | Opsional |
| Jenis | Boolean |
| Nilai yang valid | benar atau salah |
Variabel alur
Kebijakan dapat menetapkan variabel ini selama eksekusi.
| Variabel | Deskripsi | Contoh |
|---|---|---|
hmac.policy_name.message |
Kebijakan menetapkan variabel ini dengan pesan yang efektif,
hasil evaluasi template pesan yang ditentukan dalam elemen Message. |
hmac.HMAC-Policy.message = "Hello, World" |
hmac.policy_name.output |
Mendapatkan hasil
komputasi HMAC, saat elemen Output tidak
menentukan nama variabel. |
hmac.HMAC-Policy.output = /yyRjydfP+fBHTwXFgc5AZhLAg2kwCri+e35girrGw4= |
hmac.policy_name.outputencoding |
Mendapatkan nama encoding output. | hmac.HMAC-Policy.outputencoding = base64 |
Error reference
This section describes the fault codes and error messages that are returned and fault variables that are set by Apigee 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.hmac.UnresolvedVariable |
401 | This error occurs if a variable specified in the HMAC policy is either:
|
steps.hmac.HmacVerificationFailed |
401 | The HMAC verification failed; the verification value provided does not match the calculated value. |
steps.hmac.HmacCalculationFailed |
401 | The policy was unable to calculate the HMAC. |
steps.hmac.EmptySecretKey |
401 | The value of the secret key variable is empty. |
steps.hmac.EmptyVerificationValue |
401 | The variable holding the verification value is empty. |
Deployment errors
These errors can occur when you deploy a proxy containing this policy.
| Error name | HTTP status | Occurs when |
|---|---|---|
steps.hmac.MissingConfigurationElement |
401 | This error occurs when a required element or attribute is missing. |
steps.hmac.InvalidValueForElement |
401 | This error occurs if the value specified in the Algorithm element is not
one of the following values: SHA-1, SHA-224, SHA-256,
SHA-512, or MD-5. |
steps.hmac.InvalidSecretInConfig |
401 | This error occurs if there is a text value explicitly provided for SecretKey. |
steps.hmac.InvalidVariableName |
401 | This error occurs if the SecretKey variable does not contain the
private prefix (private.). |
Variabel error
Variabel ini ditetapkan saat error runtime terjadi. Untuk mengetahui informasi selengkapnya, lihat Yang perlu Anda ketahui tentang error kebijakan.
| Variabel | Dari mana | Contoh |
|---|---|---|
fault.name="fault_name" |
fault_name adalah nama error, seperti yang tercantum dalam tabel Runtime errors di atas. Nama error adalah bagian terakhir dari kode error. | fault.name Matches "UnresolvedVariable" |
hmac.policy_name.failed |
Kebijakan menetapkan variabel ini jika terjadi kegagalan. | hmac.HMAC-Policy.failed = true |
Contoh respons error
Untuk penanganan error, praktik terbaiknya adalah menjebak bagian errorcode dari respons error. Jangan mengandalkan teks di faultstring, karena teks tersebut dapat berubah.
Contoh aturan error
<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>