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

คุณกำลังดูเอกสารประกอบของ Apigee Edge
ไปที่เอกสารประกอบของ Apigee X
ข้อมูล

อะไร

ถอดรหัสส่วนหัว JWS โดยไม่ยืนยันลายเซ็นใน JWS และเขียนส่วนหัวแต่ละรายการไปยังตัวแปรโฟลว์ นโยบายนี้มีประโยชน์มากที่สุดเมื่อใช้ร่วมกับนโยบายVerifyJWS เมื่อต้องทราบค่าของส่วนหัวจากภายใน JWS ก่อนที่จะยืนยันลายเซ็นของ JWS

JWS อาจมีเพย์โหลดที่แนบมาตามที่แสดงในรูปแบบดังนี้

header.payload.signature

หรือ JWS สามารถละเว้นเพย์โหลด ซึ่งเรียกว่าเพย์โหลดdetached และอยู่ในรูปแบบดังนี้

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

ข้อมูลอ้างอิงนโยบายจะอธิบายองค์ประกอบและแอตทริบิวต์ของนโยบายการถอดรหัส JWS

แอตทริบิวต์ที่ใช้กับองค์ประกอบระดับบนสุด

<DecodeJWS name="JWS" continueOnError="false" enabled="true" async="false">

แอตทริบิวต์ต่อไปนี้มีอยู่ในองค์ประกอบระดับบนสุดของนโยบายทั้งหมด

แอตทริบิวต์ คำอธิบาย ค่าเริ่มต้น การปรากฏ
ชื่อ ชื่อภายในของนโยบาย จำกัดอักขระที่ใช้ในชื่อได้ดังต่อไปนี้ A-Z0-9._\-$ % แต่ UI การจัดการ Edge จะบังคับใช้ข้อจํากัดเพิ่มเติม เช่น นําอักขระที่ไม่ใช่ตัวอักษรและตัวเลขคละกันออกโดยอัตโนมัติ

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

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

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

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

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

จริง ไม่บังคับ
async แอตทริบิวต์นี้เลิกใช้งานแล้ว false เลิกใช้

<DisplayName>

<DisplayName>Policy Display Name</DisplayName>

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

ค่าเริ่มต้น หากคุณไม่ใส่องค์ประกอบนี้ ระบบจะใช้ค่าของแอตทริบิวต์ชื่อของนโยบาย
การปรากฏ ไม่บังคับ
ประเภท สตริง

<ที่มา>

<Source>JWS-variable</Source>

หากมี ให้ระบุตัวแปรโฟลว์ที่นโยบายคาดว่าจะค้นหา JWS เพื่อถอดรหัส

ค่าเริ่มต้น request.header.authorization (ดูข้อมูลสำคัญเกี่ยวกับค่าเริ่มต้นในหมายเหตุด้านบน)
การปรากฏ ไม่บังคับ
ประเภท สตริง
ค่าที่ถูกต้อง ชื่อตัวแปรโฟลว์ Edge

ตัวแปรโฟลว์

เมื่อประสบความสำเร็จ นโยบาย ยืนยัน JWS และ ถอดรหัส 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 ในกรณีของ ConfirmJWS ตัวแปรนี้จะเป็นจริงเมื่อยืนยันลายเซ็น และเวลาปัจจุบันคือก่อนที่โทเค็นจะหมดอายุ และหลังจากค่า 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>