คุณกำลังดูเอกสารประกอบ Apigee Edge
ไปที่
เอกสารประกอบเกี่ยวกับ Apigee X. ข้อมูล
อะไร
ถอดรหัสส่วนหัว JWS โดยไม่ยืนยันลายเซ็นใน JWS และเขียนส่วนหัวแต่ละรายการไปยัง ของตัวแปรโฟลว์ นโยบายนี้จะมีประโยชน์มากที่สุดเมื่อใช้ร่วมกับนโยบาย VerifyJWS เมื่อต้องทราบค่าของส่วนหัวจากภายใน JWS ก่อนยืนยันลายเซ็นของ JWS
JWS อาจมีเพย์โหลดที่แนบมาตามในแบบฟอร์ม
header.payload.signature
หรือ JWS สามารถละเว้นเพย์โหลดที่เรียกว่าเพย์โหลดที่ถอดออกได้ และอยู่ในรูปแบบดังนี้
header..signature
นโยบาย DecodeJWS ใช้งานได้กับทั้ง 2 ฟอร์มเนื่องจากจะถอดรหัสเฉพาะส่วนส่วนหัวของ JWS นอกจากนี้ นโยบาย DecodeJWS ยังสามารถใช้ได้ด้วยเช่นกันโดยไม่คำนึงถึงอัลกอริทึมที่ใช้ในการลงนาม JWS
ดูรายละเอียดข้อมูลเบื้องต้นได้ที่ภาพรวมนโยบายของ JWS และ JWT และภาพรวมของรูปแบบของ JWS
วิดีโอ
ดูวิดีโอสั้นๆ เพื่อดูวิธีถอดรหัส JWT ขณะที่วิดีโอนี้ ของ JWT โดยเฉพาะ แนวคิดหลายๆ อย่างของ JWS จะเหมือนกัน
ตัวอย่าง: ถอดรหัส JWS
นโยบายที่แสดงด้านล่างจะถอดรหัส JWS ที่พบในตัวแปรโฟลว์ var.JWS ช่วงเวลานี้ จะต้องแสดงตัวแปรและมี JWS ที่ทำงานได้ (ถอดรหัสได้) นโยบายสามารถรับ JWS ได้จาก ตัวแปรใดก็ตามของโฟลว์ได้
<DecodeJWS name="JWS-Decode-HS256"> <DisplayName>JWS Verify HS256</DisplayName> <Source>var.JWS</Source> </DecodeJWS>
สำหรับส่วนหัวแต่ละรายการในส่วนหัวของ JWS นโยบายจะตั้งค่าตัวแปรโฟลว์ที่ชื่อว่า
jws.policy-name.header.header-name
หาก JWS มีเพย์โหลดแนบอยู่ ระบบจะตั้งค่า jws.policy-name.header.payload
โฟลว์ตัวแปรไปยังเพย์โหลด สำหรับเพย์โหลดที่ปลดออกแล้ว payload
จะว่างเปล่า
ดูตัวแปรโฟลว์สำหรับรายการตัวแปรทั้งหมดที่นโยบายนี้กำหนดไว้
การอ้างอิงองค์ประกอบสำหรับการถอดรหัส JWS
การอ้างอิงนโยบายอธิบายองค์ประกอบและแอตทริบิวต์ของนโยบาย Decode JWS
แอตทริบิวต์ที่ ใช้กับองค์ประกอบระดับบนสุด
<DecodeJWS name="JWS" continueOnError="false" enabled="true" async="false">
แอตทริบิวต์ต่อไปนี้มีอยู่ในองค์ประกอบระดับบนสุดของนโยบายทั้งหมด
แอตทริบิวต์ | คำอธิบาย | ค่าเริ่มต้น | การตรวจหาบุคคล |
---|---|---|---|
ชื่อ |
ชื่อภายในของนโยบาย อักขระที่คุณสามารถใช้ในชื่อจะถูกจำกัดไว้เฉพาะ:
A-Z0-9._\-$ % อย่างไรก็ตาม UI การจัดการ Edge จะบังคับใช้เพิ่มเติม
เช่น การนำอักขระที่ไม่ใช่ตัวอักษรและตัวเลขคละกันออกโดยอัตโนมัติ
(ไม่บังคับ) ใช้องค์ประกอบ |
ไม่มี | ต้องระบุ |
continueOnError |
ตั้งค่าเป็น false เพื่อแสดงผลข้อผิดพลาดเมื่อนโยบายล้มเหลว เป็นเรื่องปกติ
พฤติกรรมสำหรับนโยบายส่วนใหญ่
ตั้งค่าเป็น |
เท็จ | ไม่บังคับ |
เปิดใช้อยู่ |
ตั้งค่าเป็น true เพื่อบังคับใช้นโยบาย
ตั้งค่าเป็น |
จริง | ไม่บังคับ |
ไม่พร้อมกัน | แอตทริบิวต์นี้เลิกใช้งานแล้ว | เท็จ | เลิกใช้ |
<DisplayName>
<DisplayName>Policy Display Name</DisplayName>
ใช้เพิ่มเติมจากแอตทริบิวต์ชื่อเพื่อติดป้ายกำกับนโยบายในเครื่องมือแก้ไขพร็อกซี UI การจัดการ ด้วยชื่อที่เป็นภาษาธรรมชาติต่างกัน
ค่าเริ่มต้น | หากคุณไม่ใส่องค์ประกอบนี้ ระบบจะใช้ค่าของแอตทริบิวต์ชื่อนโยบาย |
การตรวจหาบุคคล | ไม่บังคับ |
ประเภท | สตริง |
<Source>
<Source>JWS-variable</Source>
หากมี ให้ระบุตัวแปรโฟลว์ที่นโยบายคาดว่าจะพบ JWS ถอดรหัส
ค่าเริ่มต้น | request.header.authorization (ดูหมายเหตุด้านบนสำหรับข้อมูลสำคัญ)
เกี่ยวกับค่าเริ่มต้น) |
การตรวจหาบุคคล | ไม่บังคับ |
ประเภท | สตริง |
ค่าที่ถูกต้อง | ชื่อตัวแปรโฟลว์ Edge |
ตัวแปรโฟลว์
เมื่อประสบความสำเร็จ นโยบาย ยืนยัน JWS และ Decode JWS ที่ตั้งไว้ ตัวแปรบริบทตามรูปแบบนี้:
jws.{policy_name}.{variable_name}
ตัวอย่างเช่น หากชื่อนโยบายคือ verify-jws
ระบบก็จะเก็บนโยบายนั้นไว้
อัลกอริทึมที่ระบุใน JWS กับตัวแปรบริบทนี้:
วันที่ jws.verify-jws.header.algorithm
ชื่อตัวแปร | คำอธิบาย |
---|---|
decoded.header.name |
ค่าที่แยกวิเคราะห์ได้ JSON ของส่วนหัวในเพย์โหลด มีการตั้งค่า 1 ตัวแปรสำหรับ
ทุกส่วนหัวในเพย์โหลด แม้ว่าคุณจะใช้ตัวแปรโฟลว์ header.name ได้เช่นกัน
นี่คือตัวแปรที่แนะนำเพื่อใช้ในการเข้าถึงส่วนหัว |
header.algorithm |
อัลกอริทึมการเซ็นชื่อที่ใช้บน JWS เช่น RS256, HS384 และอื่นๆ ดูข้อมูลเพิ่มเติมในพารามิเตอร์ส่วนหัว(อัลกอริทึม) |
header.kid |
รหัสคีย์หากมีการเพิ่มไว้เมื่อสร้าง JWS โปรดดูเพิ่มเติม "การใช้ชุดคีย์เว็บ JSON (JWKS)" ที่ JWT และ JWS ภาพรวมนโยบายเพื่อยืนยัน JWS ดูข้อมูลเพิ่มเติมที่พารามิเตอร์ส่วนหัวของ(รหัสคีย์) |
header.type |
ค่าประเภทส่วนหัว ดูข้อมูลเพิ่มเติมในพารามิเตอร์ส่วนหัว(ประเภท) |
header.name |
ค่าของส่วนหัวที่มีชื่อ (มาตรฐานหรือเพิ่มเติม) หนึ่งในรายการเหล่านี้จะถูกตั้งค่าไว้สำหรับ ส่วนหัวเพิ่มเติมทุกรายการในส่วนหัวของ JWS |
header-json |
ส่วนหัวในรูปแบบ JSON |
payload |
เพย์โหลด JWS หาก JWS มีเพย์โหลดที่แนบมา ตัวแปรนี้จะว่างเปล่าสำหรับเพย์โหลดที่ปลดออกแล้ว |
valid |
ในกรณีของ VerifyJWS ตัวแปรนี้จะเป็นจริงเมื่อลายเซ็นได้รับการยืนยัน และ
เวลาปัจจุบันคือก่อนที่โทเค็นจะหมดอายุ และหลังจากค่า notbefore ของโทเค็น หาก
อยู่ หากไม่เลือก จะเป็นเท็จ
ในกรณีของ DecodeJWS จะไม่มีการตั้งค่าตัวแปรนี้ |
ข้อมูลอ้างอิงข้อผิดพลาด
ส่วนนี้จะอธิบายโค้ดข้อผิดพลาดและข้อความแสดงข้อผิดพลาดที่แสดงผลและตัวแปรข้อผิดพลาดที่ Edge กําหนดเมื่อนโยบายนี้ทําให้เกิดข้อผิดพลาด ข้อมูลนี้เป็นสิ่งสำคัญที่ต้องทราบหากคุณกำลังกำหนดกฎข้อผิดพลาดเพื่อจัดการกับข้อผิดพลาด ดูข้อมูลเพิ่มเติมได้ที่สิ่งที่คุณต้องทราบเกี่ยวกับข้อผิดพลาดของนโยบายและการจัดการข้อผิดพลาด
ข้อผิดพลาดเกี่ยวกับรันไทม์
ข้อผิดพลาดเหล่านี้อาจเกิดขึ้นเมื่อนโยบายทำงาน
รหัสข้อผิดพลาด | สถานะ HTTP | เกิดขึ้นเมื่อ |
---|---|---|
steps.jws.FailedToDecode |
401 | นโยบายนี้ถอดรหัส JWS ไม่ได้ JWS อาจเสียหาย |
steps.jws.FailedToResolveVariable |
401 | เกิดขึ้นเมื่อไม่มีตัวแปรโฟลว์ที่ระบุในองค์ประกอบ <Source> ของนโยบายอยู่ |
steps.jws.InvalidClaim |
401 | สำหรับการอ้างสิทธิ์ที่ขาดหายไปหรือการอ้างสิทธิ์ไม่ตรงกัน หรือส่วนหัวที่ขาดหายไปหรือส่วนหัวไม่ตรงกัน |
steps.jws.InvalidJsonFormat |
401 | พบ JSON ที่ไม่ถูกต้องในส่วนหัว JWS |
steps.jws.InvalidJws |
401 | ข้อผิดพลาดนี้เกิดขึ้นเมื่อการยืนยันลายเซ็น JWS ล้มเหลว |
steps.jws.InvalidPayload |
401 | เพย์โหลด JWS ไม่ถูกต้อง |
steps.jws.InvalidSignature |
401 | ละเว้น <DetachedContent> และ JWS มีเพย์โหลดเนื้อหาที่ถูกแยกออก |
steps.jws.MissingPayload |
401 | ไม่มีเพย์โหลด JWS |
steps.jws.NoAlgorithmFoundInHeader |
401 | เกิดขึ้นเมื่อ JWS ข้ามส่วนหัวของอัลกอริทึม |
steps.jws.UnknownException |
401 | เกิดข้อผิดพลาดที่ไม่ทราบสาเหตุ |
ข้อผิดพลาดในการทำให้ใช้งานได้
ข้อผิดพลาดเหล่านี้อาจเกิดขึ้นเมื่อคุณใช้พร็อกซีที่มีนโยบายนี้
ชื่อข้อผิดพลาด | เกิดขึ้นเมื่อ |
---|---|
InvalidAlgorithm |
ค่าที่ใช้ได้มีเพียง RS256, RS384, RS512, PS256, PS384, PS512, ES256, ES384, ES512, HS256, HS384, HS512 |
|
ข้อผิดพลาดอื่นๆ เกี่ยวกับการทำให้ใช้งานได้ที่เป็นไปได้ |
ตัวแปรความผิดพลาด
ระบบจะตั้งค่าตัวแปรเหล่านี้เมื่อเกิดข้อผิดพลาดรันไทม์ โปรดดูข้อมูลเพิ่มเติมที่หัวข้อสิ่งที่คุณจำเป็นต้องทราบ เกี่ยวกับข้อผิดพลาดของนโยบาย
ตัวแปร | สถานที่ | ตัวอย่าง |
---|---|---|
fault.name="fault_name" |
fault_name คือชื่อของข้อผิดพลาดตามที่ระบุไว้ในตารางข้อผิดพลาดรันไทม์ด้านบน ชื่อข้อผิดพลาดคือส่วนสุดท้ายของรหัสข้อผิดพลาด | fault.name Matches "TokenExpired" |
JWS.failed |
นโยบาย JWS ทั้งหมดตั้งค่าตัวแปรเดียวกันในกรณีที่ดำเนินการไม่สำเร็จ | jws.JWS-Policy.failed = true |
ตัวอย่างการตอบสนองข้อผิดพลาด
สำหรับการจัดการข้อผิดพลาด แนวทางปฏิบัติแนะนำคือให้ดักจับส่วน errorcode
ของข้อผิดพลาด
คำตอบ อย่าพึ่งพาข้อความใน faultstring
เนื่องจากอาจมีการเปลี่ยนแปลง
ตัวอย่างกฎข้อผิดพลาด
<FaultRules> <FaultRule name="JWS Policy Errors"> <Step> <Name>JavaScript-1</Name> <Condition>(fault.name Matches "TokenExpired")</Condition> </Step> <Condition>JWS.failed=true</Condition> </FaultRule> </FaultRules>