คุณกำลังดูเอกสารประกอบของ Apigee Edge
ไปที่เอกสารประกอบของ Apigee X ข้อมูล
FailedToDecode
รหัสข้อผิดพลาด
steps.jwt.FailedToDecode
เนื้อหาการตอบกลับข้อผิดพลาด
{
"fault": {
"faultstring": "Failed to Decode Token: policy({0})",
"detail": {
"errorcode": "steps.jwt.FailedToDecode"
}
}
}
สาเหตุ
ข้อผิดพลาดนี้เกิดขึ้นหาก JSON Web Token (JWT) ที่ระบุในองค์ประกอบ <Source>
ของนโยบาย JWT การถอดรหัสมีรูปแบบไม่ถูกต้อง ไม่ถูกต้อง หรือถอดรหัสไม่ได้
JWT ที่มีโครงสร้างที่เหมาะสมควรมีส่วนหัว เพย์โหลด และลายเซ็นในรูปแบบ header.payload.signature
หาก JWT ที่ส่งไปยังนโยบาย DecodeJWT ไม่มีส่วนคอมโพเนนต์ คุณจะได้รับข้อผิดพลาด ตัวอย่างเช่น หาก JWT มีเพียง payload.signature
แต่ไม่มี header
ข้อผิดพลาดก็จะเกิดขึ้น
การวินิจฉัย
ระบุตัวแปรที่ระบุในองค์ประกอบ
<Source>
ของนโยบายการถอดรหัส JWT ตัวแปรนี้ควรมี JWTตัวอย่างนโยบายการถอดรหัส JWT มีดังนี้
<DecodeJWT name="JWT-Decode-HS256"> <DisplayName>JWT Verify HS256</DisplayName> <Source>request.header.authorization</Source> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> </DecodeJWT>
ในตัวอย่างข้างต้น JWT ควรอยู่ในส่วนหัวของคำขอการให้สิทธิ์
ตรวจสอบตัวแปรที่ระบุในขั้นตอนที่ 1 และตรวจสอบเพื่อดูว่า JWT ที่ตัวแปรมีอยู่ถูกต้องหรือไม่ หากอินพุต JWT ไม่ถูกต้อง นั่นเป็นสาเหตุของข้อผิดพลาด
ในตัวอย่างคําขอ API ด้านล่าง ระบบจะส่ง JWT อินพุตในส่วนหัวของคําขอการให้สิทธิ์
curl -v "http://<org>-<env>.apigee.net/v1/decodeJWT" -H "Authorization: Bearer eyJ1c2VySWQiOiJiMDhmODZhZi0zNWRhLTQ4ZjItOGZhYi1jZWYzOTA0NjYwYmQifQ.-xN_h82PHVTCMA9vdoHrcZxH-x5mb11y1537t3rGzcM"
การตรวจสอบ JWT ปิดแสดงให้เห็นว่า JWT มีรูปแบบ
payload.signature
ซึ่งไม่ถูกต้อง รูปแบบ JWT ที่คาดไว้คือheader.payload.signature
ด้วยเหตุนี้ นโยบายการถอดรหัส JWT จะล้มเหลวเนื่องจากข้อผิดพลาด"faultstring": "Failed to Decode Token: policy({0})"
ความละเอียด
ตรวจสอบว่า JWT ที่ส่งไปยังนโยบายการถอดรหัส JWT มีองค์ประกอบทั้ง 3 รายการ มีการจัดรูปแบบอย่างถูกต้องและถอดรหัสได้
หากต้องการแก้ไขตัวอย่างที่แสดงข้างต้น คุณสามารถส่ง JWT ที่ถูกต้องในรูปแบบ header.payload.signature
ซึ่งทำได้ด้วยการเรียก API โดยใช้คำสั่ง cURL ดังนี้
curl -v "http://<org>-<env>.apigee.net/v1/decodeJWT" -H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VySWQiOiJiMDhmODZhZi0zNWRhLTQ4ZjItOGZhYi1jZWYzOTA0NjYwYmQifQ.-xN_h82PHVTCMA9vdoHrcZxH-x5mb11y1537t3rGzcM"
InvalidToken
รหัสข้อผิดพลาด
steps.jwt.InvalidToken
เนื้อหาการตอบกลับข้อผิดพลาด
{
"fault": {
"faultstring": "Invalid token: policy({0})",
"detail": {
"errorcode": "steps.jwt.InvalidToken"
}
}
}
สาเหตุ
ข้อผิดพลาดนี้เกิดขึ้นหากตัวแปรโฟลว์ที่ระบุในองค์ประกอบ <Source>
ของนโยบายการถอดรหัส JWT เป็น
- อยู่นอกขอบเขต (ใช้ไม่ได้ในขั้นตอนเฉพาะเจาะจงที่มีการใช้นโยบาย) หรือ
- แก้ไขไม่ได้ (ไม่ได้กำหนด)
การวินิจฉัย
ระบุตัวแปรที่ระบุในองค์ประกอบ
<Source>
ของนโยบายการถอดรหัส JWT ตัวแปรนี้ควรมี JWTตัวอย่างนโยบายการถอดรหัส JWT มีดังนี้
<DecodeJWT name="JWT-Decode-HS256"> <DisplayName>JWT Verify HS256</DisplayName> <Source>request.header.authorization</Source> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> </DecodeJWT>
ในตัวอย่างข้างต้น ส่วนหัวของคำขอการให้สิทธิ์ควรมี JWT
ระบุว่าตัวแปรที่ระบุในขั้นตอนที่ 1 ได้รับการกําหนดและพร้อมใช้งานในขั้นตอนที่มีการใช้นโยบายการถอดรหัส JWT หรือไม่
กรณีที่ตัวแปรเป็นอย่างใดอย่างหนึ่งต่อไปนี้
- อยู่นอกขอบเขต (ใช้ไม่ได้ในขั้นตอนเฉพาะเจาะจงที่มีการใช้นโยบาย) หรือ
- แก้ไขไม่ได้ (ไม่ได้กำหนด)
ก็จะเป็นสาเหตุของข้อผิดพลาด
ในตัวอย่างคำขอ API ด้านล่าง ผู้ใช้จะไม่ได้ส่ง JWT ในส่วนหัวของคำขอการให้สิทธิ์
curl -v "http://<org>-<env>.apigee.net/v1/decodeJWT"
เนื่องจากไม่มีการส่งผ่านส่วนหัวของคำขอการให้สิทธิ์ นโยบายการถอดรหัส JWT จะล้มเหลวโดยมีข้อผิดพลาด:
"faultstring": "Invalid token: policy({0})"
ความละเอียด
ตรวจสอบว่าตัวแปรที่อ้างอิงในองค์ประกอบ <Source>
ของนโยบาย JWT การถอดรหัสมี JWT ที่ถูกต้อง (ถอดรหัสได้) และพร้อมใช้งานในโฟลว์ที่เฉพาะเจาะจงที่มีการดำเนินการนโยบายการถอดรหัส JWT
หากต้องการแก้ไขตัวอย่างที่แสดงข้างต้น คุณสามารถส่ง JWT ที่ถูกต้องในส่วนหัวการให้สิทธิ์คำขอ ซึ่งทำได้ด้วยการเรียก API โดยใช้คำสั่ง cURL ดังนี้
curl -v "http://<org>-<env>.apigee.net/v1/decodeJWT" -H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VySWQiOiJiMDhmODZhZi0zNWRhLTQ4ZjItOGZhYi1jZWYzOTA0NjYwYmQifQ.-xN_h82PHVTCMA9vdoHrcZxH-x5mb11y1537t3rGzcM"