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

    כותרת ההרשאה היא מהסוג הבא:

    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: סוג האימות הוא לא 'Basic':

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

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

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

    steps.basicauthentication.InvalidBasicAuthenticationSource
    

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

רזולוציה

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

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

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

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