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

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

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>, אבל כותרת Authorization לא מועברת כחלק מבקשת ה-API.

אבחון

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

    "faultstring": "Unresolved variable : request.header.Authorization"
    
  2. בודקים את כל כללי המדיניות של BasicAuthentication בשרת ה-API הספציפי שבו אירעה התקלה. יכול להיות שיש מדיניות אחת או יותר של אימות בסיסי. מזהים את המדיניות או כללי המדיניות הספציפיים של 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 נשלחה ללא כותרת Authorization, כפי שמוצג בהמשך:

    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 הספציפי שבו אירעה התקלה. יכולה להיות מדיניות BasicAuthentication אחת או יותר. צריך לזהות את המדיניות הספציפית של BasicAuthentication (ies) שבה המשתנה שצוין ברכיב <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 הספציפי שבו אירעה התקלה. יכול להיות שיש מדיניות אחת או יותר של אימות בסיסי. מזהים את כללי המדיניות הספציפיים של 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. אם המשתנה הוא כותרת והוא שגוי או לא חוקי, כלומר הוא לא כולל את סוג האימות או אם סוג האימות הוא לא 'בסיסי', אז זו הסיבה לשגיאה.

    כותרת Authorization נראית כך:

    Authorization: <Authentication type> <credentials>
    

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

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

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

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

    steps.basicauthentication.InvalidBasicAuthenticationSource
    

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

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

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

    steps.basicauthentication.InvalidBasicAuthenticationSource
    

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

רזולוציה

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

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

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