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

מוצג המסמך של 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 אינו מחרוזת חוקית בקידוד 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 '23435"', תקבלו את קוד השגיאה:

    steps.basicauthentication.InvalidBasicAuthenticationSource

רזולוציה

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

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

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

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

השגיאה הזו מתקבלת אם הכותרת שהועברה אל BasicAuthentication policy לא נכונה או שהכותרת לא תקינה.

לדוגמה, השגיאה הזו מתרחשת אם המדיניות 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
    

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

רזולוציה

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

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

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