פתרון בעיות בזמן ריצה של מדיניות אימות בסיסי

אתם צופים במסמכי התיעוד של Apigee Edge.
כדאי לעיין במסמכי התיעוד של Apigee X.
מידע

UnresolvedVariable

קוד שגיאה

steps.basicauthentication.UnresolvedVariable

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

{
    "fault": {
        "faultstring": "Unresolved variable : [variable_name]",
        "detail": {
            "errorcode": "steps.basicauthentication.UnresolvedVariable"
        }
    }
}

הודעת שגיאה לדוגמה

{
    "fault": {
        "faultstring": "Unresolved variable : request.header.Authorization",
        "detail": {
            "errorcode": "steps.basicauthentication.UnresolvedVariable"
        }
    }
}

סיבה

השגיאה הזו מתרחשת אם המשתנה שמכיל את המחרוזת בקידוד Base64 שצוין ברכיב <Source> של מדיניות BasicAuthentication הוא אחד מהבאים:

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

לדוגמה, השגיאה הזו מתרחשת אם במדיניות BasicAuthentication יש משתנה שצוין כ-request.header.Authorization ברכיב<Source>, אבל כותרת ההרשאה לא מועברת כחלק מבקשת ה-API.

אבחון

  1. מזהים את המשתנה שמשמש לרכיב <Source> במדיניות BasicAuthentication. אפשר למצוא את המידע הזה באלמנט faultstring של תגובת השגיאה. לדוגמה, בקוד faultstring, הבא, המשתנה שמשמש לרכיב <Source> הוא request.header.Authorization:

    "faultstring": "Unresolved variable : request.header.Authorization"
    
  2. בודקים את כל כללי המדיניות של BasicAuthentication ב-API Proxy הספציפי שבו התרחשה השגיאה. יכול להיות שיש מדיניות אחת או יותר של BasicAuthentication. מזהים את מדיניות BasicAuthentication הספציפית או את כללי המדיניות שבהם המשתנה שצוין ברכיב <Source> תואם לשם המשתנה שזוהה במחרוזת השגיאה (שלב 1 למעלה).

    לדוגמה, במדיניות הבאה, הרכיב <Source> מוגדר למשתנה בשם request.header.Authorization, שתואם למה שמופיע ב-faultstring:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <BasicAuthentication name="DecodeBaseAuthHeaders">
      <DisplayName>Decode Basic Authentication Header</DisplayName>
      <Operation>Decode</Operation>
      <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
      <User ref="request.header.username"/>
      <Password ref="request.header.password"/>
      <Source>request.header.Authorization</Source>
    </BasicAuthentication>
    
  3. בודקים אם המשתנה מוגדר וזמין ברצף הפעולות שבו מופעלת מדיניות BasicAuthentication.

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

    1. לא כלול (לא זמין בתהליך הספציפי שבו המדיניות מופעלת)
    2. לא ניתן לפתור (לא מוגדר)

    אם כן, זו הסיבה לשגיאה.

    בדוגמה של מדיניות BasicAuthentication שמוצגת למעלה, המשתנה request.header.Authorizationלא הועבר כחלק מהבקשה. כלומר, בקשת ה-API בוצעה ללא כותרת ההרשאה, כמו שמוצג בהמשך:

    curl -v "http://org-env.apigee.net/basicauth"

    מכיוון שהמשתנה שבו נעשה שימוש במדיניות BasicAuthentication לא זמין, מתקבל קוד השגיאה:

    steps.basicauthentication.UnresolvedVariable
    

רזולוציה

מוודאים שהמשתנה שמשמש במדיניות BasicAuthentication מוגדר או מועבר כקלט וזמין בתהליך שבו המדיניות מופעלת.

כדי לפתור את הבעיה במדיניות BasicAuthentication לדוגמה שצוינה למעלה, שולחים בקשת API כמו בדוגמה הבאה:

curl -v "http://org-env.apigee.net/basicauth" -H "Authorization: Basic YWthc2g6MTIz"

InvalidBasicAuthenticationSource

קוד שגיאה

steps.basicauthentication.InvalidBasicAuthenticationSource

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

{
    "fault": {
        "faultstring": "Source variable : [variable_name] for basic authentication decode policy is not valid",
        "detail": {
            "errorcode": "steps.basicauthentication.InvalidBasicAuthenticationSource"
        }
    }
}

דוגמה לשגיאה הודעת שגיאה

{
    "fault": {
        "faultstring": "Source variable : request.header.Authorization for basic authentication decode policy is not valid",
        "detail": {
            "errorcode": "steps.basicauthentication.InvalidBasicAuthenticationSource"
        }
    }
}

גורמים אפשריים

הסיבות האפשריות לשגיאה הזו:

סיבה תיאור
משתנה מקור לא תקין משתנה מקור הקלט למדיניות BasicAuthentication הוא לא מחרוזת בקידוד Base64 תקין.
הפורמט של הכותרת שגוי הכותרת שמכילה את המחרוזת בקידוד Base64 שמועברת למדיניות BasicAuthentication היא בפורמט לא תקין.

הסיבה: משתנה מקור לא תקין

השגיאה הזו מתרחשת אם המשתנה שמכיל את המחרוזת בקידוד Base64 שצוין ברכיב <Source> של מדיניות BasicAuthentication לא מכיל ערך תקין.

לדוגמה, השגיאה הזו מתרחשת אם למשתנה שצוין ברכיב<Source> של מדיניות BasicAuthentication אין מחרוזת תקפה בקידוד Base64.

אבחון

  1. מזהים את המשתנה שמשמש לרכיב <Source> במדיניות BasicAuthentication. אפשר למצוא את המידע הזה באלמנט faultstring של תגובת השגיאה. לדוגמה, בקוד faultstring, הבא, המשתנה שמשמש לרכיב <Source> הוא request.header.Authorization:

    "faultstring": "Source variable : request.header.Authorization for basic authentication decode policy is not valid"
    
  2. בודקים את כל כללי המדיניות של BasicAuthentication ב-API Proxy הספציפי שבו התרחשה השגיאה. יכול להיות שיש מדיניות אחת או יותר של BasicAuthentication. מזהים את מדיניות BasicAuthentication הספציפית (או את מדיניות BasicAuthentication הספציפיות) שבהן המשתנה שצוין ברכיב <Source> תואם לשם המשתנה שזוהה במחרוזת השגיאה (שלב 1 למעלה).

    לדוגמה, במדיניות הבאה, הרכיב <Source> מוגדר למשתנה בשם request.header.Authorization, שתואם למה שמופיע ב-faultstring:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <BasicAuthentication name="DecodeBaseAuthHeaders">
        <DisplayName>Decode Basic Authentication Header</DisplayName>
        <Operation>Decode</Operation>
        <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
        <User ref="request.header.username"/>
        <Password ref="request.header.password"/>
        <Source>request.header.Authorization</Source>
    </BasicAuthentication>
    
  3. אם הערך שמאוחסן במשתנה שצוין ברכיב <Source> הוא לא מחרוזת תקפה שעברה קידוד בפורמט Base64, אזזו הסיבה לשגיאה.

    בדוגמה של מדיניות BasicAuthentication שמוצגת למעלה, המשתנה request.header.Authorizationשנשלח על ידי הלקוח ככותרת היה לא תקין, כפי שמוצג בהמשך:

    curl -v "http://org-env.apigee.net/basicauth" -H "Authorization: Basic 23435"

    מכיוון שהמשתנה request.header.Authorizationכולל מחרוזת בקידוד Base64 לא תקין '23435"', מוצג קוד השגיאה:

    steps.basicauthentication.InvalidBasicAuthenticationSource

רזולוציה

צריך לוודא שהמשתנה שצוין לרכיב <Source> במדיניות BasicAuthentication מכיל מחרוזת תקינה בקידוד Base64.

כדי לפתור את הבעיה במדיניות לדוגמה של BasicAuthentication שצוינה למעלה, שולחים בקשת API עם מחרוזת בקידוד Base64 תקין בכותרת Authorization, כמו שמוצג בהמשך:

curl -v "http://org-env.apigee.net/basicauth" -H "Authorization: Basic YWthc2g6MTIz"

הסיבה: הכותרת לא תקינה או שהפורמט שלה שגוי

השגיאה הזו מתרחשת אם הכותרת שמועברת אל מדיניות BasicAuthentication היא בפורמט שגוי או לא תקין.

לדוגמה, השגיאה הזו מתרחשת אם במדיניות BasicAuthentication יש משתנה שצוין כ-request.header.Authorization ברכיב<Source>, והכותרת שמועברת כחלק מבקשת ה-API היא פגומה או לא תקינה.

אבחון

  1. מזהים את המשתנה שמשמש לרכיב <Source> במדיניות BasicAuthentication. אפשר למצוא את המידע הזה באלמנט faultstring של תגובת השגיאה. לדוגמה, בשגיאה הבאה, המשתנה שמשמש לרכיב <Source> הוא request.header.Authorization:

    "faultstring": "Source variable : request.header.Authorization for basic authentication decode policy is not valid"
    
  2. בודקים את כל כללי המדיניות של BasicAuthentication ב-API Proxy הספציפי שבו התרחשה השגיאה. יכול להיות שיש מדיניות אחת או יותר של BasicAuthentication. מזהים את מדיניות BasicAuthentication הספציפית (או את מדיניות BasicAuthentication הספציפיות) שבהן המשתנה שצוין ברכיב <Source> תואם לשם המשתנה שזוהה במחרוזת השגיאה (שלב 1 למעלה).

    לדוגמה, במדיניות הבאה, הרכיב <Source> מוגדר למשתנה בשם request.header.Authorization, שתואם למה שמופיע ב-faultstring:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <BasicAuthentication name="DecodeBaseAuthHeaders">
        <DisplayName>Decode Basic Authentication Header</DisplayName>
        <Operation>Decode</Operation>
        <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
        <User ref="request.header.username"/>
        <Password ref="request.header.password"/>
        <Source>request.header.Authorization</Source>
    </BasicAuthentication>
    
  3. אם המשתנה הוא כותרת והוא לא תקין או לא חוקי, כלומר אין לו סוג אימות או שסוג האימות הוא לא Basic, זו הסיבה לשגיאה.

    כותרת ההרשאה נראית כך:

    Authorization: <Authentication type> <credentials>
    

    אפשר להעביר כותרת בפורמט שגוי למדיניות BasicAuthentication בשתי דרכים:

    דוגמה 1: אין סוג אימות בכותרת:

    curl -v "http://org-env.apigee.net/basicauth" -H "Authorization: YWthc2g6MTIz"

    בדוגמה שלמעלה, בכותרת Authorization לא מופיע סוג האימות. אם הכותרת הזו מועברת למדיניות BasicAuthentication שמוצגת למעלה, מתקבל קוד השגיאה:

    steps.basicauthentication.InvalidBasicAuthenticationSource
    

    דוגמה 2: סוג האימות הוא לא 'Basic':

    curl -v "http://org-env.apigee.net/basicauth" -H "Authorization: OAuth YWthc2g6MTIz"

    בדוגמה שלמעלה, לכותרת Authorization אין את סוג האימות Basic. אם מעבירים את הערך הזה למדיניות BasicAuthentication שמוצגת למעלה, מקבלים את קוד השגיאה:

    steps.basicauthentication.InvalidBasicAuthenticationSource
    

    באופן דומה, השגיאה הזו יכולה להתרחש גם אם סוג האימות, כמו Bearer,‏ Digest Auth וכו', נמצא ב-Authorization header.

רזולוציה

מוודאים שהכותרת שבה מועבר הקלט למדיניות BasicAuthentication כוללת את סוג האימות והיא מסוג Basic.

כדי לפתור את הבעיה במדיניות BasicAuthentication לדוגמה שצוינה למעלה, צריך לשלוח בקשת API על ידי העברת מחרוזת בקידוד Base64 עם סוג האימות 'Basic' בכותרת Authorization, כמו שמוצג בהמשך:

curl -v "http://org-env.apigee.net/basicauth" -H "Authorization: Basic YWthc2g6MTIz"