אתם צופים במסמכי התיעוד של Apigee Edge.
כדאי לעיין במסמכי התיעוד של Apigee X. מידע
FailedToDecode
קוד שגיאה
steps.jwt.FailedToDecode
גוף התגובה לשגיאה
{
"fault": {
"faultstring": "Failed to Decode Token: policy({0})",
"detail": {
"errorcode": "steps.jwt.FailedToDecode"
}
}
}
סיבה
השגיאה הזו מתרחשת אם טוקן האינטרנט מסוג JSON (JWT) שצוין ברכיב <Source> של מדיניות Decode JWT (פענוח JWT) הוא פגום, לא תקין או לא ניתן לפענוח.
JWT מובנה בצורה תקינה צריך להכיל כותרת, מטען ייעודי (payload) וחתימה בפורמט הבא: header.payload.signature. אם חסר רכיב ב-JWT שמועבר למדיניות DecodeJWT, תוצג השגיאה. לדוגמה, אם ה-JWT מכיל רק payload.signature, אבל חסר בו header, השגיאה תתרחש.
אבחון
מזהים את המשתנה שצוין ברכיב
<Source>של מדיניות Decode JWT. המשתנה הזה צריך להכיל את אסימון ה-JWT.זוהי דוגמה למדיניות של Decode 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. כתוצאה מכך, המדיניות Decode JWT נכשלת עם השגיאה :"faultstring": "Failed to Decode Token: policy({0})"
רזולוציה
מוודאים שקובץ ה-JWT שמועבר למדיניות Decode 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> של מדיניות Decode JWT הוא:
- מחוץ להיקף (לא זמין בתהליך הספציפי שבו המדיניות מופעלת) או
- לא ניתן לפתור (לא מוגדר)
אבחון
מזהים את המשתנה שצוין ברכיב
<Source>של מדיניות Decode JWT. המשתנה הזה צריך להכיל את אסימון ה-JWT.זוהי דוגמה למדיניות Decode JWT:
<DecodeJWT name="JWT-Decode-HS256"> <DisplayName>JWT Verify HS256</DisplayName> <Source>request.header.authorization</Source> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> </DecodeJWT>בדוגמה שלמעלה, כותרת בקשת ההרשאה צריכה להכיל את ה-JWT.
בודקים אם המשתנה שזוהה בשלב 1 מוגדר וזמין בתהליך שבו מופעלת המדיניות Decode JWT.
אם המשתנה הוא:
- מחוץ להיקף (לא זמין בתהליך הספציפי שבו המדיניות מופעלת) או
- לא ניתן לפתור (לא מוגדר)
אז זו הסיבה לשגיאה.
בדוגמה של בקשת ה-API שבהמשך, המשתמש לא מעביר את ה-JWT בכותרת של בקשת ההרשאה.
curl -v "http://<org>-<env>.apigee.net/v1/decodeJWT"
מכיוון שכותרת בקשת ההרשאה לא מועברת, המדיניות Decode JWT נכשלת עם השגיאה:
"faultstring": "Invalid token: policy({0})"
רזולוציה
צריך לוודא שהמשתנה שאליו יש הפניה ברכיב <Source> של מדיניות Decode JWT מוגדר, מכיל JWT תקין (ניתן לפענוח) וזמין בתהליך הספציפי שבו מופעלת מדיניות Decode JWT.
כדי לתקן את הדוגמה שמוצגת למעלה, אפשר להעביר JWT תקין בכותרת ההרשאה של הבקשה. אפשר לעשות זאת באמצעות קריאה ל-API באמצעות פקודת cURL באופן הבא:
curl -v "http://<org>-<env>.apigee.net/v1/decodeJWT" -H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VySWQiOiJiMDhmODZhZi0zNWRhLTQ4ZjItOGZhYi1jZWYzOTA0NjYwYmQifQ.-xN_h82PHVTCMA9vdoHrcZxH-x5mb11y1537t3rGzcM"