מדיניות Basicאימות

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

מה

מאפשרת להשתמש באימות בסיסי קל משקל כדי לאבטח את החיבורים האחרונים. המדיניות מקבלת שם משתמש וסיסמה, מקודדת אותם בפורמט Base64 וכותבת את הערך שמתקבל למשתנה. הערך שמתקבל הוא בפורמט Basic Base64EncodedString. בדרך כלל כותבים את הערך הזה בכותרת HTTP, כמו הכותרת Authorization.

המדיניות מאפשרת גם לפענח פרטי כניסה שמאוחסנים במחרוזת מקודדת של Base64 לשם משתמש ולסיסמה.

סרטון: בסרטון הזה מוסבר איך לקודד שם משתמש וסיסמה ב-Base64 באמצעות מדיניות האימות הבסיסי.

סרטון: בסרטון הזה מוסבר איך לפענח שם משתמש וסיסמה בקידוד Base64 באמצעות מדיניות אימות בסיסי.

דוגמאות

קידוד בשיחות יוצאות

<BasicAuthentication name="ApplyBasicAuthHeader">
   <DisplayName>ApplyBasicAuthHeader</DisplayName>
   <Operation>Encode</Operation>
   <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
   <User ref="BasicAuth.credentials.username" />
   <Password ref="BasicAuth.credentials.password" />
   <AssignTo createNew="false">request.header.Authorization</AssignTo>
</BasicAuthentication>

בהגדרת המדיניות לדוגמה שלמעלה, שם המשתמש והסיסמה שצריך לקודד נגזרים מהמשתנים שצוינו במאפייני ref ברכיבים <User> ו-<Password>. צריך להגדיר את המשתנים לפני שהמדיניות הזו מופעלת. בדרך כלל, המשתנים מאוכלסים בערכים שנקראים ממפת מפתח/ערך. ראו מדיניות בנושא פעולות של Key Value Map.

ההגדרה הזו גורמת לכותרת ה-HTTP בשם Authorization, כפי שמצוין ברכיב <AssignTo>, להתווסף להודעת הבקשה היוצאת שנשלחת לשרת העורפי:

Authorization: Basic TXlVc2VybmFtZTpNeVBhc3N3b3Jk

הערכים של <User> ו-<Password> משורשרים עם נקודתיים לפני קידוד Base64.

נניח שיש לכם מיפוי של מפתח/ערך עם הרשומה הבאה:

{
  "encrypted" : true,
  "entry" : [ {
    "name" : "username",
    "value" : "MyUsername"
  }, {
    "name" : "password",
    "value" : "MyPassword"
  } ],
  "name" : "BasicAuthCredentials"
}
      

כדי לחלץ את הערכים של הרכיבים <User> ו-<Password> מחנות המפתחות/ערכים ולאכלס אותם במשתנים credentials.username ו-credentials.password, צריך לצרף את כללי המדיניות הבאים של KeyValueMapOperations לפני כלל המדיניות BasicAuthentication:

<KeyValueMapOperations name="getCredentials" mapIdentifier="BasicAuthCredentials">
  <Scope>apiproxy</Scope>
  <Get assignTo="credentials.username" index='1'>
    <Key>
      <Parameter>username</Parameter>
    </Key>
  </Get>
  <Get assignTo="credentials.password" index='1'>
    <Key>
      <Parameter>password</Parameter>
    </Key>
  </Get>
</KeyValueMapOperations>
      

פענוח של שיחות נכנסות

<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>

בדוגמה הזו למדיניות, המדיניות מפענחת את שם המשתמש והסיסמה מתוך Authorization כותרת ה-HTTP, כפי שמצוין ברכיב <Source>. המחרוזת בקידוד Base64 צריכה להיות בפורמט Basic Base64EncodedString.

המדיניות כותבת את שם המשתמש המפוענח למשתנה request.header.username ואת הסיסמה המפוענחת למשתנה request.header.password.


מידע על המדיניות בנושא אימות בסיסי

למדיניות יש שני מצבי פעולה:

  • קידוד: קידוד Base64 מקודד שם משתמש וסיסמה שמאוחסנים במשתנים
  • Decode: מפענח את שם המשתמש והסיסמה ממחרוזת בקידוד Base64

בדרך כלל, שם המשתמש והסיסמה מאוחסנים בחנות של זוגות מפתח/ערך, ואז נקראים ממנה בזמן הריצה. פרטים על שימוש בחנות של זוגות מפתח/ערך מופיעים במאמר מדיניות בנושא פעולות של מיפוי מפתח/ערך.

הפניה לרכיב

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

<BasicAuthentication async="false" continueOnError="false" enabled="true" name="Basic-Authentication-1">
   <DisplayName>Basic Authentication 1</DisplayName>
   <Operation>Encode</Operation>
   <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
   <User ref="request.queryparam.username" />
   <Password ref="request.queryparam.password" />
   <AssignTo createNew="false">request.header.Authorization</AssignTo>
   <Source>request.header.Authorization</Source> 
</BasicAuthentication>

מאפיינים של <BasicAuthentication>

<BasicAuthentication async="false" continueOnError="false" enabled="true" name="Basic-Authentication-1">

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

מאפיין תיאור ברירת מחדל נוכחות
name

השם הפנימי של המדיניות. הערך של המאפיין name יכול לכלול אותיות, מספרים, רווחים, מקפים, קווים תחתונים ונקודות. הערך הזה לא יכול ארוך מ-255 תווים.

אפשר להשתמש ברכיב <DisplayName> כדי להוסיף תווית למדיניות עורך ה-Proxy של ממשק המשתמש לניהול בעל שם אחר בשפה טבעית.

לא רלוונטי חובה
continueOnError

צריך להגדיר את הערך false כדי להחזיר שגיאה כשמדיניות נכשלת. המצב הזה צפוי של רוב כללי המדיניות.

יש להגדיר ל-true כדי שביצוע התהליך יימשך גם לאחר המדיניות נכשל.

false אופציונלי
enabled

צריך להגדיר את הערך true כדי לאכוף את המדיניות.

צריך להגדיר את הערך false כדי להשבית את המדיניות. המדיניות לא תהיה אכיפה גם אם היא ממשיכה להיות מחוברת לזרימה.

true אופציונלי
async

המאפיין הזה הוצא משימוש.

false הוצא משימוש

&lt;DisplayName&gt; רכיב

צריך להשתמש בנוסף למאפיין name כדי להוסיף תווית למדיניות עורך proxy של ממשק משתמש לניהול עם שם אחר בשפה טבעית.

<DisplayName>Policy Display Name</DisplayName>
ברירת מחדל

לא רלוונטי

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

נוכחות אופציונלי
סוג מחרוזת

אלמנט <Operation>

המדיניות קובעת אם פרטי הכניסה מקודדים או מפוענחים ב-Base64.

<Operation>Encode</Operation>
ברירת מחדל: לא רלוונטי
נוכחות: חובה
סוג:

מחרוזת.

הערכים האפשריים כוללים:

  • קידוד
  • Decode

אלמנט <IgnoreUnresolvedVariables>

אם המדיניות מוגדרת כ-true, לא תופיע שגיאה אם לא ניתן לפתור משתנה. כשמשתמשים בהגדרה הזו בהקשר של מדיניות BasicAuthentication, בדרך כלל היא מוגדרת ל-false כי בדרך כלל עדיף להציג שגיאה אם לא ניתן למצוא שם משתמש או סיסמה במשתנים שצוינו.

<IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
ברירת מחדל: true
נוכחות: אופציונלי
סוג:

בוליאני

אלמנט <User>

  • לקידוד, משתמשים ברכיב <User> כדי לציין את המשתנה שמכיל את שם המשתמש. הערכים של שם המשתמש והסיסמה מחוברים באמצעות נקודתיים לפני קידוד Base64.
  • לפענוח, מציינים את המשתנה שבו ייכתב שם המשתמש המפוענח.
<User ref="request.queryparam.username" /> 
ברירת מחדל: לא רלוונטי
נוכחות: חובה
סוג:

לא רלוונטי

מאפיינים

מאפיין תיאור ברירת מחדל נוכחות
ref

המשתנה שממנו המדיניות קוראת באופן דינמי את שם המשתמש (קידוד) או כותבת את שם המשתמש (פענוח).

לא רלוונטי חובה

אלמנט <Password>

  • לקידוד, משתמשים באלמנט <Password> כדי לציין את המשתנה שמכיל את הסיסמה.
  • לפענוח, מציינים את המשתנה שבו הסיסמה המפוענחת נכתבת.
<Password ref="request.queryparam.password" />
ברירת מחדל: לא רלוונטי
נוכחות: חובה
סוג:

לא רלוונטי

מאפיינים

מאפיין תיאור ברירת מחדל נוכחות
ref

המשתנה שממנו המדיניות קוראת באופן דינמי את הסיסמה (encode) או כותבת את הסיסמה (decode).

לא רלוונטי חובה

אלמנט <AssignTo>

עבור פעולת Encode, המדיניות הזו מציינת את משתנה היעד שיוגדר עם הערך המקודד שנוצר על ידי המדיניות הזו.

בדוגמה הבאה מצוין שהמדיניות צריכה להגדיר את הכותרת Authorization של ההודעה לערך שנוצר:

<AssignTo createNew="false">request.header.Authorization</AssignTo>
ברירת מחדל: לא רלוונטי
נוכחות: נדרש לפעולה Encode.
סוג:

מחרוזת

מאפיינים

מאפיין תיאור ברירת מחדל נוכחות
createNew ההגדרה קובעת אם המדיניות תשכתב את המשתנה אם הוא כבר מוגדר.

אם הערך הוא false, ההקצאה למשתנה מתרחשת רק אם המשתנה לא מוגדר (null).

אם הערך הוא true, ההקצאה למשתנה תמיד מתרחשת.

בדרך כלל מגדירים את המאפיין הזה לערך false (ברירת המחדל).

false אופציונלי

אלמנט <Source>

לפענוח, המשתנה שמכיל את המחרוזת בקידוד Base64, בפורמט Basic Base64EncodedString. לדוגמה, מציינים request.header.Authorization, שמתאים לכותרת Authorization.

<Source>request.header.Authorization</Source>
ברירת מחדל: לא רלוונטי
נוכחות: נדרש לפעולת הפענוח.
סוג:

לא רלוונטי

משתני תהליך

משתנה הזרימה הבא מוגדר כשהמדיניות נכשלת:

  • BasicAuthentication.{policy_name}.failed (עם הערך true)

הפניה לשגיאה

בקטע הזה מתוארים קודי השגיאה והודעות השגיאה שהוחזרו, ומשתני התקלה שמוגדרים על ידי Edge כשהמדיניות הזו גורמת לשגיאה. חשוב לדעת את המידע הזה אם אתם מפתחים כללי כשל כדי לטפל בשגיאות. מידע נוסף זמין במאמר מה צריך לדעת? מידע על שגיאות שקשורות למדיניות וטיפול פגמים.

שגיאות זמן ריצה

השגיאות האלה עשויות להתרחש כשהמדיניות מופעלת.

קוד תקלה סטטוס HTTP סיבה תיקון
steps.basicauthentication.InvalidBasicAuthenticationSource 500 במהלך פענוח כשהמחרוזת הנכנסת בקידוד Base64 לא מכילה ערך חוקי או הכותרת לא תקינה (למשל, לא מתחילה ב-'בסיסי').
steps.basicauthentication.UnresolvedVariable 500 משתני המקור הנדרשים לפענוח או לקידוד לא קיימים. השגיאה הזו יכולה מתרחשת רק אם הערך של IgnoreUnresolvedVariables הוא False.

שגיאות פריסה

השגיאות האלו עשויות להתרחש כאשר פורסים שרת proxy שמכיל את המדיניות הזו.

שם השגיאה מתרחשת כאשר תיקון
UserNameRequired הרכיב <User> חייב להיכלל בפעולה בעלת השם.
PasswordRequired הרכיב <Password> חייב להיכלל בפעולה בעלת השם.
AssignToRequired הרכיב <AssignTo> חייב להיכלל בפעולה בעלת השם.
SourceRequired הרכיב <Source> חייב להיכלל בפעולה בעלת השם.

משתני כשל

המשתנים האלה מוגדרים כשמתרחשת שגיאה בסביבת זמן הריצה. מידע נוסף זמין במאמר מה צריך לדעת? על שגיאות שקשורות למדיניות.

משתנים איפה דוגמה
fault.name="fault_name" fault_name הוא שם השגיאה, כפי שמצוין בטבלה שגיאות זמן ריצה שלמעלה. שם השגיאה הוא החלק האחרון בקוד השגיאה. fault.name Matches "UnresolvedVariable"
BasicAuthentication.policy_name.failed policy_name הוא השם שצוין על ידי המשתמש של המדיניות שגרמה לבעיה. BasicAuthentication.BA-Authenticate.failed = true

דוגמה לתגובת שגיאה

{  
   "fault":{  
      "detail":{  
         "errorcode":"steps.basicauthentication.UnresolvedVariable"
      },
      "faultstring":"Unresolved variable : request.queryparam.password"
   }
}

דוגמה לכלל שגוי

<FaultRule name="Basic Authentication Faults">
    <Step>
        <Name>AM-UnresolvedVariable</Name>
        <Condition>(fault.name Matches "UnresolvedVariable") </Condition>
    </Step>
    <Step>
        <Name>AM-AuthFailedResponse</Name>
        <Condition>(fault.name = "InvalidBasicAuthenticationSource")</Condition>
    </Step>
    <Condition>(BasicAuthentication.BA-Authentication.failed = true) </Condition>
</FaultRule>

סכימות

נושאים קשורים

מדיניות בנושא פעולות של Key Value Map