מוצג המסמך של 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 במבנה תקין צריך להכיל כותרת, מטען ייעודי (payload) וחתימה בפורמט הבא: 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 נראה שהפורמט
payload.signature
לא תקין. הפורמט הצפוי של ה-JWT הואheader.payload.signature
. כתוצאה מכך, המדיניות 'פענוח קוד של JWT' נכשלת ומתקבלת השגיאה :"faultstring": "Failed to Decode Token: policy({0})"
רזולוציה
צריך לוודא שה-JWT שמועבר למדיניות ה-JWT מפענח מכיל את כל שלושת הרכיבים, שהפורמט שלו תקין ושניתן לפענח אותו.
כדי לתקן את הדוגמה שלמעלה, אפשר להעביר 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"