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

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

אבחון

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

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

    steps.basicauthentication.InvalidBasicAuthenticationSource

רזולוציה

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

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

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

    כותרת ההרשאה מופיעה בצורה הזו:

    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 עם סוג אימות "בסיסי" בכותרת האישור כפי שמוצג בהמשך:

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