คุณกำลังดูเอกสารประกอบ Apigee Edge
ไปที่
เอกสารประกอบเกี่ยวกับ Apigee X. ข้อมูล
ประมวลผลและยืนยันรหัสการตรวจสอบสิทธิ์ข้อความแบบแฮช (HMAC) บางครั้ง HMAC จะใช้แฮชแบบเข้ารหัสที่เรียกว่ารหัสการตรวจสอบสิทธิ์ข้อความคีย์หรือแฮชที่มีคีย์ เช่น SHA-1, SHA-224, SHA-256, SHA-384, SHA-512 หรือ MD-5 พร้อมกับรหัสลับ เพื่อสร้างลายเซ็นหรือรหัสการตรวจสอบสิทธิ์ข้อความในข้อความนั้น คำว่า "ข้อความ" ที่นี่ หมายถึงสตรีมของไบต์ใดก็ได้ ผู้ส่งข้อความจะส่ง HMAC ไปยังผู้รับได้ด้วย และผู้รับสามารถใช้ HMAC เพื่อตรวจสอบสิทธิ์ข้อความ
หากต้องการเรียนรู้เพิ่มเติมเกี่ยวกับ HMAC ดู HMAC: การแฮชด้วยคีย์ สำหรับ Message Authentication (rfc2104)
ตัวอย่าง
สร้าง 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>
ยืนยัน 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>
การคำนวณลายเซ็นและการยืนยันลายเซ็นนั้นเหมือนกันทุกประการ ขั้นตอนได้ นโยบาย HMAC จะคำนวณ HMAC และสามารถเลือกยืนยันการประมวลผล ลายเซ็นกับค่าที่คาดไว้ องค์ประกอบ VerificationValue ที่ไม่บังคับ (หากมี) กําหนดให้นโยบายตรวจสอบค่าที่คำนวณแล้วเทียบกับค่าที่ทราบหรือระบุไว้
การอ้างอิงองค์ประกอบสำหรับ HMAC
ข้อมูลอ้างอิงของนโยบายอธิบายองค์ประกอบและแอตทริบิวต์ของนโยบาย HMAC
แอตทริบิวต์ที่ ใช้กับองค์ประกอบระดับบนสุด
<HMAC name="HMAC" continueOnError="false" enabled="true" async="false">
แอตทริบิวต์ต่อไปนี้มีอยู่ในองค์ประกอบระดับบนสุดของนโยบายทั้งหมด
แอตทริบิวต์ | คำอธิบาย | ค่าเริ่มต้น | การตรวจหาบุคคล |
---|---|---|---|
ชื่อ |
ชื่อภายในของนโยบาย อักขระที่คุณสามารถใช้ในชื่อจะถูกจำกัดไว้เฉพาะ:
A-Z0-9._\-$ % แต่ UI ของ Apigee จะบังคับใช้เพิ่มเติม
เช่น การนำอักขระที่ไม่ใช่ตัวอักษรและตัวเลขคละกันออกโดยอัตโนมัติ
(ไม่บังคับ) ใช้องค์ประกอบ |
ไม่มี | ต้องระบุ |
continueOnError |
ตั้งค่าเป็น false เพื่อแสดงผลข้อผิดพลาดเมื่อนโยบายล้มเหลว เป็นเรื่องปกติ
พฤติกรรมสำหรับนโยบายส่วนใหญ่
ตั้งค่าเป็น |
เท็จ | ไม่บังคับ |
เปิดใช้อยู่ |
ตั้งค่าเป็น true เพื่อบังคับใช้นโยบาย
ตั้งค่าเป็น |
จริง | ไม่บังคับ |
ไม่พร้อมกัน | แอตทริบิวต์นี้เลิกใช้งานแล้ว | เท็จ | เลิกใช้ |
<Algorithm>
<Algorithm>algorithm-name</Algorithm>
ระบุอัลกอริทึมแฮชเพื่อคํานวณ HMAC
ค่าเริ่มต้น | ไม่มี |
การตรวจหาบุคคล | ต้องระบุ |
ประเภท | สตริง |
ค่าที่ถูกต้อง | SHA-1 SHA-224 SHA-256 SHA-384
SHA-512 และ MD-5
การกำหนดค่านโยบายจะยอมรับชื่ออัลกอริทึมโดยไม่มีการแยกตัวพิมพ์เล็กและใหญ่ และ
มีหรือไม่มี ขีดระหว่างตัวอักษรและตัวเลข เช่น |
<DisplayName>
<DisplayName>Policy Display Name</DisplayName>
ใช้เพิ่มเติมจากแอตทริบิวต์ชื่อเพื่อติดป้ายกำกับนโยบายในตัวแก้ไขพร็อกซี UI ของ Apigee ด้วยชื่อที่เป็นภาษาธรรมชาติต่างกัน
ค่าเริ่มต้น | หากคุณไม่ใส่องค์ประกอบนี้ ระบบจะใช้ค่าของแอตทริบิวต์ชื่อนโยบาย |
การตรวจหาบุคคล | ไม่บังคับ |
ประเภท | สตริง |
<Message>
<Message>message_template_here</Message> or <Message ref='variable_here'/>
ระบุเพย์โหลดของข้อความที่จะเซ็น อินพุตขององค์ประกอบนี้สนับสนุน เทมเพลตข้อความ (การแทนที่ตัวแปร) เพื่ออนุญาตให้มีการรวมรายการเพิ่มเติมขณะรันไทม์ เช่น การประทับเวลา, nonces, รายการของ หรือข้อมูลอื่นๆ เช่น
<Message>Fixed Part {a_variable} {timeFormatUTCMs(timeFormatString1,system.timestamp)} {nonce} </Message>
เทมเพลตข้อความอาจมีส่วนต่างๆ แบบคงที่และตัวแปร รวมถึงบรรทัดใหม่และฟังก์ชันแบบคงที่ ช่องว่างเป็นสิ่งสำคัญ
ค่าเริ่มต้น | ไม่มี |
การตรวจหาบุคคล | ต้องระบุ |
ประเภท | สตริง |
ค่าที่ถูกต้อง | สตริงใดก็ได้ที่ถูกต้องสำหรับค่าข้อความ หากระบุแอตทริบิวต์ ref
จะมีลำดับความสำคัญเหนือกว่าค่าข้อความ นโยบายจะประเมินทั้งข้อความ
หรือตัวแปรที่อ้างอิงเป็นเทมเพลตข้อความ |
<Output>
<Output encoding='encoding_name'>variable_name</Output>
ระบุชื่อตัวแปรที่นโยบายควรตั้งค่าด้วยค่า HMAC ที่คำนวณแล้ว รวมถึงระบุการเข้ารหัสที่จะใช้สำหรับเอาต์พุตด้วย
ค่าเริ่มต้น |
ตัวแปรเอาต์พุตเริ่มต้นคือ ค่าเริ่มต้นสำหรับแอตทริบิวต์ |
การตรวจหาบุคคล | ไม่บังคับ หากไม่มีองค์ประกอบนี้อยู่ นโยบายจะตั้งค่าตัวแปรโฟลว์
hmac.POLICYNAME.output ซึ่งมีค่าที่เข้ารหัสฐาน 64 |
ประเภท | สตริง |
ค่าที่ถูกต้อง | สำหรับการเข้ารหัส ค่าดังกล่าวไม่คำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ ค่าข้อความขององค์ประกอบ |
<SecretKey>
<SecretKey encoding='encoding_name' ref='private.secretkey'/>
ระบุคีย์ลับที่ใช้ในการคำนวณ HMAC คีย์ได้รับมาจากการอ้างอิง โดยถอดรหัสตามการเข้ารหัสที่เฉพาะเจาะจง
ค่าเริ่มต้น |
ไม่มีค่าเริ่มต้นสำหรับตัวแปรที่อ้างอิง
ต้องระบุแอตทริบิวต์ หากไม่มีแอตทริบิวต์ |
การตรวจหาบุคคล | ต้องระบุ |
ประเภท | สตริง |
ค่าที่ถูกต้อง | สำหรับ การใช้แอตทริบิวต์การเข้ารหัสจะช่วยให้คุณระบุคีย์ที่ รวมไบต์ที่อยู่นอกช่วงอักขระ UTF-8 ที่พิมพ์ได้ ตัวอย่างเช่น สมมติว่าการกำหนดค่านโยบายมีข้อมูลต่อไปนี้ <SecretKey encoding='hex' ref='private.encodedsecretkey'/>
และสมมติว่า
ในกรณีนี้ ไบต์คีย์จะถอดรหัสเป็น [53 65 63 72 65 74 31 32 33]
(แต่ละไบต์แสดงด้วยเลขฐานสิบหก) อีกตัวอย่างหนึ่งคือ หาก |
<VerificationValue>
<VerificationValue encoding='encoding_name' ref='variable_name'/> or <VerificationValue encoding='encoding_name'>string_value</VerificationValue>
(ไม่บังคับ) ระบุค่าการตรวจสอบ ตลอดจนอัลกอริทึมการเข้ารหัสที่ ที่ใช้เข้ารหัสค่าการยืนยัน นโยบายจะใช้อัลกอริทึมนี้เพื่อถอดรหัสค่า
ค่าเริ่มต้น | ไม่มีค่าการยืนยันเริ่มต้น หากมีองค์ประกอบอยู่แต่
ไม่มีแอตทริบิวต์ encoding นโยบายใช้การเข้ารหัสเริ่มต้นเป็น base64 |
การตรวจหาบุคคล | ไม่บังคับ |
ประเภท | สตริง |
ค่าที่ถูกต้อง |
ค่าที่ถูกต้องสำหรับแอตทริบิวต์การเข้ารหัสคือ การเข้ารหัสของ |
<IgnoreUnresolvedVariables>
<IgnoreUnresolvedVariables>true|false</IgnoreUnresolvedVariables>
ตั้งค่าเป็น false
หากต้องการให้นโยบายแสดงข้อผิดพลาดเมื่อระบุตัวแปรที่อ้างอิงไว้
ในนโยบายนั้นไม่สามารถแก้ปัญหาได้ ตั้งค่าเป็น true
เพื่อจัดการตัวแปรที่แปลงไม่ได้ใดๆ เป็นสตริงว่าง
(Null)
บูลีน ignoreUnresolvedVariable จะส่งผลต่อตัวแปรที่อ้างอิงโดยค่า
เทมเพลตข้อความ แม้ว่า SecretKey
และ VerificationValue
จะอ้างอิงตัวแปรได้ ซึ่งทั้ง 2 อย่าง
ส่วนขยายทั้งหมดต้องแก้ไขได้ ดังนั้นการตั้งค่า ignore
จะไม่มีผลกับรายการเหล่านั้น
ค่าเริ่มต้น | เท็จ |
การตรวจหาบุคคล | ไม่บังคับ |
ประเภท | บูลีน |
ค่าที่ถูกต้อง | จริงหรือเท็จ |
ตัวแปรโฟลว์
นโยบายนี้ตั้งค่าตัวแปรเหล่านี้ได้ในระหว่างการดำเนินการ
ตัวแปร | คำอธิบาย | ตัวอย่าง |
---|---|---|
hmac.policy_name.message |
นโยบายจะกำหนดตัวแปรนี้
ด้วยข้อความที่มีประสิทธิภาพ
ผลจากการประเมินเทมเพลตข้อความที่ระบุใน Message
|
hmac.HMAC-Policy.message = "Hello, World" |
hmac.policy_name.output |
รับผลลัพธ์ของ
การคำนวณ HMAC เมื่อองค์ประกอบ Output
ไม่ระบุชื่อตัวแปร |
hmac.HMAC-Policy.output = /yyRjydfP+fBHTwXFgc5AZhLAg2kwCri+e35girrGw4= |
hmac.policy_name.outputencoding |
รับชื่อของการเข้ารหัสเอาต์พุต | hmac.HMAC-Policy.outputencoding = base64 |
การอ้างอิงข้อผิดพลาด
ส่วนนี้จะอธิบายโค้ดข้อผิดพลาดและข้อความแสดงข้อผิดพลาดที่แสดงผลและตัวแปรความผิดที่ Apigee กำหนดเมื่อนโยบายนี้ทริกเกอร์ข้อผิดพลาด ข้อมูลนี้เป็นสิ่งสำคัญที่ต้องทราบหากคุณกำลังกำหนดกฎข้อผิดพลาดเพื่อจัดการกับข้อผิดพลาด ดูข้อมูลเพิ่มเติมได้ที่สิ่งที่คุณต้องทราบเกี่ยวกับข้อผิดพลาดของนโยบายและการจัดการข้อผิดพลาด
ข้อผิดพลาดเกี่ยวกับรันไทม์
ข้อผิดพลาดเหล่านี้อาจเกิดขึ้นเมื่อนโยบายทำงาน
รหัสข้อผิดพลาด | สถานะ HTTP | เกิดขึ้นเมื่อ |
---|---|---|
steps.hmac.UnresolvedVariable |
401 | ข้อผิดพลาดนี้เกิดขึ้นหากตัวแปรที่ระบุในนโยบาย HMAC มีลักษณะดังนี้
|
steps.hmac.HmacVerificationFailed |
401 | การยืนยัน HMAC ล้มเหลว ค่าการยืนยันที่ระบุไม่ตรงกับมูลค่าที่คำนวณไว้ |
steps.hmac.HmacCalculationFailed |
401 | นโยบายนี้คำนวณ HMAC ไม่ได้ |
steps.hmac.EmptySecretKey |
401 | ค่าของตัวแปรคีย์ลับว่างเปล่า |
steps.hmac.EmptyVerificationValue |
401 | ตัวแปรที่มีค่าการยืนยันว่างเปล่า |
ข้อผิดพลาดในการทำให้ใช้งานได้
ข้อผิดพลาดเหล่านี้อาจเกิดขึ้นเมื่อคุณใช้พร็อกซีที่มีนโยบายนี้
ชื่อข้อผิดพลาด | สถานะ HTTP | เกิดขึ้นเมื่อ |
---|---|---|
steps.hmac.MissingConfigurationElement |
401 | ข้อผิดพลาดนี้เกิดขึ้นเมื่อองค์ประกอบหรือแอตทริบิวต์ที่จำเป็นหายไป |
steps.hmac.InvalidValueForElement |
401 | ข้อผิดพลาดนี้เกิดขึ้นหากค่าที่ระบุในองค์ประกอบอัลกอริทึมไม่ใช่ค่าใดค่าหนึ่งต่อไปนี้ SHA-1 , SHA-224 , SHA-256 , SHA-512 หรือ MD-5 |
steps.hmac.InvalidSecretInConfig |
401 | ข้อผิดพลาดนี้เกิดขึ้นหากมีการระบุค่าข้อความไว้อย่างชัดเจนสำหรับ SecretKey |
steps.hmac.InvalidVariableName |
401 | ข้อผิดพลาดนี้เกิดขึ้นหากตัวแปร SecretKey ไม่มีคำนำหน้า private (private. ) |
ตัวแปรความผิดพลาด
ระบบจะตั้งค่าตัวแปรเหล่านี้เมื่อเกิดข้อผิดพลาดรันไทม์ สำหรับข้อมูลเพิ่มเติม ดูสิ่งที่คุณจำเป็นต้องทราบ เกี่ยวกับข้อผิดพลาดของนโยบาย
ตัวแปร | สถานที่ | ตัวอย่าง |
---|---|---|
fault.name="fault_name" |
fault_name คือชื่อของข้อผิดพลาดตามที่ระบุไว้ใน ตารางข้อผิดพลาดรันไทม์ด้านบน ชื่อข้อผิดพลาดเป็นชื่อสุดท้าย ของรหัสข้อผิดพลาด | fault.name Matches "UnresolvedVariable" |
hmac.policy_name.failed |
โดยนโยบายจะกำหนดตัวแปรนี้ในกรณีที่ไม่สำเร็จ | hmac.HMAC-Policy.failed = true |
ตัวอย่างการตอบสนองข้อผิดพลาด
สำหรับการจัดการข้อผิดพลาด แนวทางปฏิบัติแนะนำคือให้ดักจับส่วน errorcode
ของข้อผิดพลาด
คำตอบ อย่าพึ่งพาข้อความใน faultstring
เนื่องจากอาจมีการเปลี่ยนแปลง
ตัวอย่างกฎข้อผิดพลาด
<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>