ถอดรหัสนโยบาย JWS

คุณกำลังดูเอกสารประกอบของ 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 จะบังคับใช้ข้อจำกัดเพิ่มเติม เช่น การนำอักขระที่ไม่ใช่ตัวอักษรและตัวเลขออกโดยอัตโนมัติ

หรือใช้องค์ประกอบ <displayname></displayname> เพื่อ ติดป้ายกำกับนโยบายในเครื่องมือแก้ไขพร็อกซีของ UI การจัดการด้วยชื่อภาษาธรรมชาติอื่น

ไม่มี ต้องระบุ
continueOnError ตั้งค่าเป็น false เพื่อแสดงข้อผิดพลาดเมื่อนโยบายล้มเหลว ซึ่งเป็นลักษณะการทำงานที่คาดไว้ของนโยบายส่วนใหญ่

ตั้งค่าเป็น true เพื่อให้การดำเนินการโฟลว์ดำเนินต่อไปแม้หลังจากนโยบาย ล้มเหลว

false ไม่บังคับ
enabled ตั้งค่าเป็น true เพื่อบังคับใช้นโยบาย

ตั้งค่าเป็น false เพื่อ "ปิด" นโยบาย ระบบจะไม่บังคับใช้นโยบาย แม้ว่าจะยังคงแนบอยู่กับโฟลว์ก็ตาม

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

EmptyElementForKeyConfiguration

FailedToResolveVariable

InvalidConfigurationForActionAndAlgorithmFamily

InvalidConfigurationForVerify

InvalidEmptyElement

InvalidFamiliesForAlgorithm

InvalidKeyConfiguration

InvalidNameForAdditionalClaim

InvalidNameForAdditionalHeader

InvalidPublicKeyId

InvalidPublicKeyValue

InvalidSecretInConfig

InvalidTypeForAdditionalClaim

InvalidTypeForAdditionalHeader

InvalidValueForElement

InvalidValueOfArrayAttribute

InvalidVariableNameForSecret

MissingConfigurationElement

MissingElementForKeyConfiguration

MissingNameForAdditionalClaim

MissingNameForAdditionalHeader

ข้อผิดพลาดอื่นๆ เกี่ยวกับการทำให้ใช้งานได้ที่เป็นไปได้

ตัวแปรความผิดพลาด

ระบบจะตั้งค่าตัวแปรเหล่านี้เมื่อเกิดข้อผิดพลาดรันไทม์ โปรดดูข้อมูลเพิ่มเติมที่หัวข้อสิ่งที่คุณจำเป็นต้องทราบ เกี่ยวกับข้อผิดพลาดของนโยบาย

ตัวแปร สถานที่ ตัวอย่าง
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>