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

הדף הזה רלוונטי ל-Apigee ול-Apigee Hybrid.

לעיון במסמכי התיעוד של Apigee Edge

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://$EXTERNAL_IP/basicauth"

    כאשר $EXTERNAL_IP היא כתובת ה-IP של מאזן העומסים החיצוני. כתובת ה-IP הזו חשופה לאינטרנט. מידע נוסף זמין במאמר בנושא התאמה אישית של ניתוב הגישה.

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

    steps.basicauthentication.UnresolvedVariable
    

רזולוציה

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

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

curl -v "http://$EXTERNAL_IP/basicauth" -H "Authorization: Basic YWthc2g6MTIz"

כאשר $EXTERNAL_IP היא כתובת ה-IP של מאזן העומסים החיצוני. כתובת ה-IP הזו חשופה לאינטרנט. מידע נוסף זמין במאמר בנושא התאמה אישית של ניתוב הגישה.

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 הספציפית (או את המדיניות הספציפית) שבה המשתנה שצוין ברכיב <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://$EXTERNAL_IP /basicauth" -H "Authorization: Basic 23435"

    כאשר $EXTERNAL_IP היא כתובת ה-IP של מאזן העומסים החיצוני. כתובת ה-IP הזו חשופה לאינטרנט. מידע נוסף זמין במאמר בנושא התאמה אישית של ניתוב הגישה.

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

    steps.basicauthentication.InvalidBasicAuthenticationSource

רזולוציה

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

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

curl -v "http://$EXTERNAL_IP/basicauth" -H "Authorization: Basic YWthc2g6MTIz"

כאשר $EXTERNAL_IP היא כתובת ה-IP של מאזן העומסים החיצוני. כתובת ה-IP הזו חשופה לאינטרנט. מידע נוסף זמין במאמר בנושא התאמה אישית של ניתוב הגישה.

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

השגיאה הזו מתרחשת אם הכותרת שמועברת אל מדיניות 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 הספציפית (או את המדיניות הספציפית) שבה המשתנה שצוין ברכיב <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://$EXTERNAL_IP/basicauth" -H "Authorization: YWthc2g6MTIz"

    כאשר $EXTERNAL_IP היא כתובת ה-IP של מאזן העומסים החיצוני. כתובת ה-IP הזו חשופה לאינטרנט. מידע נוסף זמין במאמר בנושא התאמה אישית של ניתוב הגישה.

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

    steps.basicauthentication.InvalidBasicAuthenticationSource
    

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

    curl -v "http://$EXTERNAL_IP/basicauth" -H "Authorization: OAuth YWthc2g6MTIz"

    כאשר $EXTERNAL_IP היא כתובת ה-IP של מאזן העומסים החיצוני. כתובת ה-IP הזו חשופה לאינטרנט. מידע נוסף זמין במאמר בנושא התאמה אישית של ניתוב הגישה.

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

    steps.basicauthentication.InvalidBasicAuthenticationSource
    

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

רזולוציה

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

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

curl -v "http://$EXTERNAL_IP/basicauth" -H "Authorization: Basic YWthc2g6MTIz"

כאשר $EXTERNAL_IP היא כתובת ה-IP של מאזן העומסים החיצוני. כתובת ה-IP הזו חשופה לאינטרנט. מידע נוסף זמין במאמר בנושא התאמה אישית של ניתוב הגישה.