פענוח פתרון של שגיאות בזמן ריצה של JWT

אתם מציגים את מסמכי התיעוד של Apigee Edge.
כניסה למסמכי העזרה של Apigee X.
info

FailedToDecode

קוד שגיאה

steps.jwt.FailedToDecode

גוף התשובה לשגיאה

{
  "fault": {
    "faultstring": "Failed to Decode Token: policy({0})",
    "detail": {
       "errorcode": "steps.jwt.FailedToDecode"
     }
  }
}

סיבה

השגיאה הזו מתרחשת אם אסימון האינטרנט מסוג JSON (JWT) שצוין ברכיב <Source> של מדיניות פענוח ה-JWT פגום, לא חוקי או לא ניתן לפענח מסיבה אחרת.

JWT בפורמט תקין צריך להכיל כותרת, מטען ייעודי (payload) וחתימה בפורמט הבא: header.payload.signature. אם ב-JWT שהועבר למדיניות DecodeJWT חסר חלק של רכיב, תתקבל השגיאה. לדוגמה, אם ב-JWT יש רק payload.signature, אבל חסר בו header, תופיע השגיאה.

אבחון

  1. מזהים את המשתנה שצוין ברכיב <Source> של מדיניות פענוח ה-JWT. המשתנה הזה צריך להכיל את ה-JWT.

    זוהי דוגמה למדיניות של פענוח JWT:

    <DecodeJWT name="JWT-Decode-HS256">
        <DisplayName>JWT Verify HS256</DisplayName>
        <Source>request.header.authorization</Source>
        <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
    </DecodeJWT>
    

    בדוגמה שלמעלה, ה-JWT צריך להופיע בכותרת של בקשת ההרשאה.

  2. בודקים את המשתנה שזוהה בשלב 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 של פענוח הקוד הוא:

  • לא בהיקף (לא זמין בתהליך הספציפי שבו המדיניות מופעלת) או
  • לא ניתן לפתרון (לא מוגדר)

אבחון

  1. מזהים את המשתנה שצוין ברכיב <Source> של מדיניות פענוח ה-JWT. המשתנה הזה צריך להכיל את ה-JWT.

    דוגמה למדיניות JWT בפענוח קוד:

    <DecodeJWT name="JWT-Decode-HS256">
        <DisplayName>JWT Verify HS256</DisplayName>
        <Source>request.header.authorization</Source>
        <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
    </DecodeJWT>
    

    בדוגמה שלמעלה, הכותרת של בקשת ההרשאה צריכה להכיל את ה-JWT.

  2. בודקים אם המשתנה שזוהה בשלב 1 מוגדר וזמין בתהליך שבו מתבצעת ההפעלה של מדיניות ה-Decode JWT.

  3. אם המשתנה הוא:

    • מחוץ להיקף (לא זמין בתהליך הספציפי שבו המדיניות מתבצעת) או
    • לא ניתן לפתור (לא מוגדר)

    אז זה הגורם לשגיאה.

    בבקשת ה-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"