אתם צופים במסמכי התיעוד של Apigee ושל Apigee Hybrid.
לעיון במסמכי התיעוד של
Apigee Edge.
FailedToDecode
קוד שגיאה
steps.jwt.FailedToDecode
גוף התשובה לשגיאה
{
"fault": {
"faultstring": "Failed to Decode Token: policy({0})",
"detail": {
"errorcode": "steps.jwt.FailedToDecode"
}
}
}
מטרה
השגיאה הזו מתרחשת אם הטוקן של JSON Web Token (JWT) שצוין ברכיב <Source> של מדיניות Decode JWT (פענוח JWT) הוא פגום, לא חוקי או לא ניתן לפענוח.
אסימון JWT מובנה כראוי צריך להכיל כותרת, מטען ייעודי וחתימה בפורמט הבא: 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://$EXTERNAL_IP/v1/decodeJWT" -H "Authorization: Bearer eyJ1c2VySWQiOiJiMDhmODZhZi0zNWRhLTQ4ZjItOGZhYi1jZWYzOTA0NjYwYmQifQ.-xN_h82PHVTCMA9vdoHrcZxH-x5mb11y1537t3rGzcM"
כאשר
$EXTERNAL_IPהיא כתובת ה-IP של מאזן העומסים החיצוני. כתובת ה-IP הזו חשופה לאינטרנט. מידע נוסף זמין במאמר בנושא התאמה אישית של ניתוב הגישה.בבדיקה מדוקדקת של ה-JWT, אפשר לראות שהפורמט שלו הוא
payload.signature, שהוא פורמט לא תקין. הפורמט הנדרש של ה-JWT הואheader.payload.signature. כתוצאה מכך, המדיניות Decode JWT נכשלת עם השגיאה :"faultstring": "Failed to Decode Token: policy({0})"
רזולוציה
מוודאים ש-JWT שמועבר למדיניות Decode JWT מכיל את כל שלושת האלמנטים, שהוא בפורמט הנכון ושאפשר לפענח אותו.
כדי לתקן את הדוגמה שמוצגת למעלה, אפשר להעביר JWT תקין בפורמט header.payload.signature. כדי לעשות זאת, אפשר להשתמש בפקודת cURL כדי לבצע את הקריאה ל-API באופן הבא:
curl -v "http://$EXTERNAL_IP/v1/decodeJWT" -H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VySWQiOiJiMDhmODZhZi0zNWRhLTQ4ZjItOGZhYi1jZWYzOTA0NjYwYmQifQ.-xN_h82PHVTCMA9vdoHrcZxH-x5mb11y1537t3rGzcM"
כאשר $EXTERNAL_IP היא כתובת ה-IP של מאזן העומסים החיצוני.
כתובת ה-IP הזו חשופה לאינטרנט. מידע נוסף זמין במאמר בנושא התאמה אישית של ניתוב הגישה.
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>בדוגמה שלמעלה, כותרת הבקשה Authorization צריכה להכיל את ה-JWT.
בודקים אם המשתנה שזוהה בשלב 1 מוגדר וזמין בתהליך שבו מופעלת המדיניות Decode JWT.
אם המשתנה הוא:
- מחוץ להיקף (לא זמין בתהליך הספציפי שבו המדיניות מופעלת) או
- לא ניתן לפתור (לא מוגדר)
אז זו הסיבה לשגיאה.
בדוגמה של בקשת ה-API שבהמשך, המשתמש לא מעביר את ה-JWT בכותרת הבקשה של ההרשאה.
curl -v "http://$EXTERNAL_IP/v1/decodeJWT"
כאשר $EXTERNAL_IP היא כתובת ה-IP של מאזן העומסים החיצוני.
כתובת ה-IP הזו חשופה לאינטרנט. מידע נוסף זמין במאמר בנושא התאמה אישית של ניתוב הגישה.
Because the authorization request header is not passed, the Decode JWT policy fails with the error:
```
"faultstring": "Invalid token: policy({0})"
```
רזולוציה
צריך לוודא שהמשתנה שאליו יש הפניה ברכיב <Source> של מדיניות Decode JWT מוגדר, מכיל JWT תקין (ניתן לפענוח) וזמין בתהליך הספציפי שבו מופעלת מדיניות Decode JWT.
כדי לתקן את הדוגמה שמוצגת למעלה, אפשר להעביר JWT תקין בכותרת ההרשאה של הבקשה. כדי לעשות זאת, אפשר להשתמש בפקודת cURL כדי לבצע את הקריאה ל-API באופן הבא:
curl -v "http://$EXTERNAL_IP/v1/decodeJWT" -H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VySWQiOiJiMDhmODZhZi0zNWRhLTQ4ZjItOGZhYi1jZWYzOTA0NjYwYmQifQ.-xN_h82PHVTCMA9vdoHrcZxH-x5mb11y1537t3rGzcM"
כאשר $EXTERNAL_IP היא כתובת ה-IP של מאזן העומסים החיצוני.
כתובת ה-IP הזו חשופה לאינטרנט. מידע נוסף זמין במאמר בנושא התאמה אישית של ניתוב הגישה.