מוצג המסמך של 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>
. המשתנים חייבים להיות
מוגדרת לפני שהמדיניות מופעלת. בדרך כלל, המשתנים מאוכלסים בערכים
ממפת מפתח/ערך. ראו מפת ערכי מפתח
מדיניות תפעול.
כתוצאה מהתצורה הזו תופיע כותרת ה-HTTP בשם Authorization, כפי שמצוין על ידי <AssignTo>, נוסף להודעת הבקשה היוצאת שנשלחה לשרת העורפי:
Authorization: Basic TXlVc2VybmFtZTpNeVBhc3N3b3Jk
הערכים <User>
ו-<Password>
משורשרים
עם נקודתיים לפני קידוד Base64.
נניח שיש לכם מפת מפתח/ערך עם הערך הבא:
{ "encrypted" : true, "entry" : [ { "name" : "username", "value" : "MyUsername" }, { "name" : "password", "value" : "MyPassword" } ], "name" : "BasicAuthCredentials" }
יש לצרף את כללי המדיניות הבאים של KeyValueMapOperations לפני מדיניות BasicAuthentication
להיות מסוגל לחלץ את הערכים של <User>
<Password>
ממאגר המפתח/הערך ומאכלסים אותם
המשתנים credentials.username
ו-credentials.password
.
<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>
בדוגמה הזו, המדיניות מפענחת את שם המשתמש והסיסמה
כותרת ה-HTTP Authorization
, כפי שצוין על ידי הרכיב <Source>. Base64
המחרוזת המקודדת חייבת להיות בצורה Basic Base64EncodedString.
המדיניות כותבת את שם המשתמש המפוענח למשתנה request.header.username, את הסיסמה המפוענחת למשתנה request.header.password.
מידע על המדיניות בנושא אימות בסיסי
למדיניות יש שני מצבי פעולה:
- מקודד: מערכת Base64 מקודדת שם משתמש וסיסמה שמאוחסנים משתנים
- מפענח: מפענח את שם המשתמש והסיסמה מחרוזת בקידוד 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 |
השם הפנימי של המדיניות. הערך של המאפיין אפשר להשתמש ברכיב |
לא רלוונטי | חובה |
continueOnError |
צריך להגדיר את הערך יש להגדיר ל- |
false | אופציונלי |
enabled |
צריך להגדיר את הערך צריך להגדיר את הערך |
true | אופציונלי |
async |
המאפיין הזה הוצא משימוש. |
false | הוצא משימוש |
<DisplayName> רכיב
צריך להשתמש בנוסף למאפיין name
כדי להוסיף תווית למדיניות
עורך proxy של ממשק משתמש לניהול עם שם אחר בשפה טבעית.
<DisplayName>Policy Display Name</DisplayName>
ברירת מחדל |
לא רלוונטי אם משמיטים את הרכיב הזה, הערך של המאפיין |
---|---|
נוכחות | אופציונלי |
סוג | מחרוזת |
<Operation> רכיב
המדיניות קובעת אם המדיניות Base64 מקודדת או מפענחת פרטי כניסה.
<Operation>Encode</Operation>
ברירת המחדל: | לא רלוונטי |
נוכחות: | חובה |
סוג: |
מחרוזת. הערכים החוקיים כוללים:
|
<IgnoreUnresolvedVariables> רכיב
כשהמדיניות מוגדרת לערך true
, המדיניות לא תקפיץ הודעת שגיאה אם אי אפשר לשנות את המשתנה
הבעיה נפתרה. כשנעשה בה שימוש בהקשר של מדיניות BasicAuthentication, ההגדרה הזו בדרך כלל מוגדרת.
ל-false
, כי בדרך כלל כדאי לזרוק שגיאה אם שם משתמש
לא ניתן למצוא את הסיסמה במשתנים שצוינו.
<IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
ברירת המחדל: | true |
נוכחות: | אופציונלי |
סוג: |
בוליאני |
<User> רכיב
- לצורך קידוד, צריך להשתמש ברכיב
<User>
כדי לציין את המשתנה שמכיל את שם המשתמש. הערכים של שם המשתמש והסיסמה חוברו בנקודתיים לפני קידוד Base64. - לצורך הפענוח, מציינים את המשתנה שבו כתוב שם המשתמש המפוענח.
<User ref="request.queryparam.username" />
ברירת המחדל: | לא רלוונטי |
נוכחות: | חובה |
סוג: |
לא רלוונטי |
מאפיינים
מאפיין | תיאור | ברירת מחדל | נוכחות |
---|---|---|---|
אזכור |
המשתנה שממנו המדיניות קוראת באופן דינמי את שם המשתמש (מקודד) או כותבת שם המשתמש (פענוח). |
לא רלוונטי | חובה |
<Password> רכיב
- לצורך קידוד, צריך להשתמש ברכיב
<Password>
כדי לציין את המשתנה שמכיל את הסיסמה. - לצורך פענוח, מציינים את המשתנה שבו כתובה הסיסמה המפוענחת.
<Password ref="request.queryparam.password" />
ברירת המחדל: | לא רלוונטי |
נוכחות: | חובה |
סוג: |
לא רלוונטי |
מאפיינים
מאפיין | תיאור | ברירת מחדל | נוכחות |
---|---|---|---|
אזכור |
המשתנה שממנו המדיניות קוראת באופן דינמי את הסיסמה (מקודדת) או כותבת את הסיסמה (פענוח). |
לא רלוונטי | חובה |
<AssignTo> רכיב
מציינת את משתנה היעד שצריך להגדיר עם הערך המקודד או המפוענח שנוצר על ידי הפונקציה המדיניות בנושא
בדוגמה הבאה מצוין שהמדיניות צריכה להגדיר את המאפיין Authorization
.
כותרת ההודעה לערך שנוצר:
<AssignTo createNew="false">request.header.Authorization</AssignTo>
ברירת המחדל: | לא רלוונטי |
נוכחות: | חובה |
סוג: |
מחרוזת |
מאפיינים
מאפיין | תיאור | ברירת מחדל | נוכחות |
---|---|---|---|
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 לא מכילה ערך תקין או שהכותרת לא תקינה (למשל, היא לא מתחילה ב-'Basic'). | build |
steps.basicauthentication.UnresolvedVariable |
500 | משתני המקור הנדרשים לפענוח או לקידוד לא נמצאים. השגיאה הזו יכולה להתרחש רק אם הערך של IgnoreUnresolvedVariables הוא false. |
build |
שגיאות בפריסה
השגיאות האלו עשויות להתרחש כאשר פורסים שרת proxy שמכיל את המדיניות הזו.
שם השגיאה | מתרחש כאשר | תיקון |
---|---|---|
UserNameRequired |
הרכיב <User> חייב להיכלל בפעולה בעלת השם. |
build |
PasswordRequired |
הרכיב <Password> חייב להופיע בפעולה בעלת השם. |
build |
AssignToRequired |
הרכיב <AssignTo> חייב להופיע בפעולה בעלת השם. |
build |
SourceRequired |
הרכיב <Source> חייב להופיע בפעולה בעלת השם. |
build |
משתני תקלה
המשתנים האלה מוגדרים כשמתרחשת שגיאה בסביבת זמן הריצה. מידע נוסף זמין במאמר מה צריך לדעת לגבי שגיאות מדיניות.
משתנים | איפה | דוגמה |
---|---|---|
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>