คุณกำลังดูเอกสารประกอบของ Apigee Edge
ไปที่
เอกสารประกอบของ Apigee X info
อะไร
ถอดรหัสส่วนหัวของ JWS โดยไม่ต้องยืนยันลายเซ็นใน JWS และเขียนส่วนหัวแต่ละรายการลงในตัวแปรโฟลว์ นโยบายนี้มีประโยชน์มากที่สุดเมื่อใช้ร่วมกับนโยบาย VerifyJWS ในกรณีที่ต้องทราบค่าของส่วนหัวจากภายใน JWS ก่อนที่จะยืนยันลายเซ็นของ JWS
JWS สามารถมีเพย์โหลด แนบ ได้ในรูปแบบต่อไปนี้
header.payload.signature
หรือ JWS สามารถละเว้นเพย์โหลด ซึ่งเรียกว่าเพย์โหลด แยก และอยู่ในรูปแบบต่อไปนี้
header..signature
นโยบาย DecodeJWS ใช้ได้กับทั้ง 2 รูปแบบเนื่องจากถอดรหัสเฉพาะส่วนหัวของ JWS นโยบาย DecodeJWS ยังใช้ได้โดยไม่คำนึงถึงอัลกอริทึมที่ใช้ในการลงนาม JWS
ดูข้อมูลเบื้องต้นโดยละเอียด และภาพรวมของรูปแบบ JWS ได้ที่ภาพรวมนโยบาย JWS และ JWT
วิดีโอ
ดูวิดีโอสั้นๆ เพื่อเรียนรู้วิธีถอดรหัส 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 จะว่างเปล่า
ดูรายการตัวแปรทั้งหมดที่นโยบายนี้ตั้งค่าได้ที่ ตัวแปรโฟลว์
ข้อมูลอ้างอิงองค์ประกอบสำหรับ Decode JWS
ข้อมูลอ้างอิงนโยบายจะอธิบายองค์ประกอบและแอตทริบิวต์ของนโยบาย Decode JWS
แอตทริบิวต์ที่ ใช้กับองค์ประกอบระดับบนสุด
<DecodeJWS name="JWS" continueOnError="false" enabled="true" async="false">
แอตทริบิวต์ต่อไปนี้เป็นแอตทริบิวต์ทั่วไปขององค์ประกอบระดับบนสุดของนโยบายทั้งหมด
| แอตทริบิวต์ | คำอธิบาย | ค่าเริ่มต้น | การมีอยู่ |
|---|---|---|---|
| name |
ชื่อภายในของนโยบาย อักขระที่คุณใช้ในชื่อได้จะจำกัดไว้ที่:
A-Z0-9._\-$ % อย่างไรก็ตาม UI การจัดการของ Edge จะบังคับใช้ข้อจำกัดเพิ่มเติม
เช่น การนำอักขระที่ไม่ใช่ตัวอักษรและตัวเลขออกโดยอัตโนมัติ
หรือใช้องค์ประกอบ |
ไม่มี | ต้องระบุ |
| continueOnError |
ตั้งค่าเป็น false เพื่อแสดงข้อผิดพลาดเมื่อนโยบายล้มเหลว ซึ่งเป็นลักษณะการทำงานที่คาดไว้ของนโยบายส่วนใหญ่
ตั้งค่าเป็น |
false | ไม่บังคับ |
| enabled |
ตั้งค่าเป็น true เพื่อบังคับใช้นโยบาย
ตั้งค่าเป็น |
true | ไม่บังคับ |
| async | แอตทริบิวต์นี้เลิกใช้งานแล้ว | false | เลิกใช้ |
<DisplayName>
<DisplayName>Policy Display Name</DisplayName>
ใช้เพิ่มเติมจากแอตทริบิวต์ name เพื่อติดป้ายกำกับนโยบายในเครื่องมือแก้ไขพร็อกซีของ UI การจัดการ ด้วยชื่อภาษาธรรมชาติอื่น
| ค่าเริ่มต้น | หากคุณละเว้นองค์ประกอบนี้ ระบบจะใช้ค่าของแอตทริบิวต์ name ของนโยบาย |
| การมีอยู่ | ไม่บังคับ |
| ประเภท | สตริง |
<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>