מוצג המסמך של Apigee Edge.
עוברים אל
מסמכי תיעוד של Apigee X. מידע
מה
OAuthV2 היא מדיניות מרובת מאפיינים לביצוע פעולות מסוג הענקת OAuth 2.0. כאן המדיניות הראשית שמשמשת להגדרת נקודות קצה מסוג OAuth 2.0 ב-Apigee Edge.
טיפ: מידע נוסף על OAuth ב-Apigee Edge זמין במאמר דף הבית של OAuth. הוא מספק קישורים ועד למשאבים, דוגמאות, סרטונים ועוד. מידע נוסף על אפשרויות מתקדמות דוגמת OAuth ב-GitHub כדי להדגים איך משתמשים במדיניות הזו תרגום מכונה.
טעימות
VerifyAccessToken
VerifyAccessToken
התצורה הזו של מדיניות OAuthV2 (עם הפעולה VerifyAccessToken) מאמתת ש אסימון הגישה שנשלח ל-Apigee Edge תקין. כשפעולת המדיניות הזו מופעלת, Edge מחפש אסימון גישה חוקי בבקשה. אם אסימון הגישה חוקי, הבקשה מורשה להמשיך. אם הערך לא תקין, כל העיבוד יופסק ותוחזר שגיאה תשובה.
<OAuthV2 async="false" continueOnError="false" enabled="true" name="OAuth-v20-2"> <DisplayName>OAuth v2.0 2</DisplayName> <Operation>VerifyAccessToken</Operation> <AccessTokenPrefix>Bearer</AccessTokenPrefix> <!-- Optional, default is Bearer --> </OAuthV2>
הערה: יש תמיכה רק באסימוני OAuth 2.0. אימות הודעות אין תמיכה באסימוני קוד (MAC).
לדוגמה:
$ curl -H "Authorization: Bearer ylSkZIjbdWybfsUQe9BqP0LH5Z" http://{org_name}-test.apigee.net/weather/forecastrss?w=12797282
כברירת מחדל, Edge מקבל אסימוני גישה בכותרת Authorization
עם
את הקידומת Bearer
. אפשר לשנות את ברירת המחדל הזו באמצעות <AccessToken>
לרכיב מסוים.
GenerateAccessToken
המערכת יוצרת אסימוני גישה
כדי לראות דוגמאות שממחישות איך לבקש אסימוני גישה לכל אחד מסוגי הענקות הנתמכים: למידע נוסף, אפשר לקרוא את המאמר בקשת אסימוני גישה קודי הרשאה. הנושא כולל דוגמאות לפעולות הבאות:
GenerateAuthorizationCode
יצירת קוד הרשאה
לדוגמאות שמראות איך לבקש קודי הרשאה, ראו בקשת קודי הרשאה קוד הרשאה.
RefreshAccessToken
רענון של אסימון גישה
לדוגמאות שמראות איך לבקש אסימוני גישה באמצעות אסימון רענון, ראו רענון של אסימון גישה.
אסימון לזרימת התשובה
יצירת אסימון גישה בתהליך התגובה
לפעמים צריך ליצור אסימון גישה בתהליך התגובה. לדוגמה, עשויות לעשות זאת בתגובה לאימות מותאם אישית שמתבצע בשירות לקצה העורפי. במשפט הזה, בתרחיש לדוגמה נדרש גם אסימון גישה וגם אסימון רענון, ששולל את ההרשאה המשתמעת מהסוג הזה. במקרה הזה, נשתמש בסוג הענקת הסיסמה כדי ליצור את האסימון. כפי שתראו, הטריק ליצירת פעולה זו הוא להעביר בכותרת של בקשת הרשאה באמצעות JavaScript המדיניות בנושא
קודם כול, נבחן את המדיניות לדוגמה:
<OAuthV2 enabled="true" continueOnError="false" async="false" name="generateAccessToken"> <Operation>GenerateAccessToken</Operation> <AppEndUser>Doe</AppEndUser> <UserName>jdoe</UserName> <PassWord>jdoe</PassWord> <GrantType>grant_type</GrantType> <ClientId>a_valid_client_id</ClientId> <SupportedGrantTypes> <GrantType>password</GrantType> </SupportedGrantTypes> </OAuthV2>
אם המדיניות הזו מוגדרת כחלק מתהליך התגובה, היא תיכשל ותוצג שגיאה מסוג '401 לא מורשה' למרות שהפרמטרים הנכונים של ההתחברות מצוינים במדיניות. כדי לפתור את הבעיה, צריך להגדיר כותרת לבקשת הרשאה.
הכותרת Authorization חייבת להכיל ערכת גישה בסיסית עם קידוד Base64 client_id:client_secret.
אפשר להוסיף את הכותרת הזו באמצעות מדיניות JavaScript שמופיעה ממש לפני מדיניות OAuthV2, ככה. הערך "local_clientid" ו-"local_secret" חייבים להיות מוגדרים קודם לכן בתהליך:
var client_id = context.getVariable("local_clientid"); var client_secret = context.getVariable("local_secret"); context.setVariable("request.header.Authorization","Basic "+CryptoJS.enc.Base64.stringify(CryptoJS.enc.Latin1 .parse(client_id + ':' + client_secret)));
למידע נוסף, אפשר לעיין במאמר "קידוד בסיסי אימות פרטי כניסה.
הפניה לרכיבים
בחומר העזר בנושא המדיניות מתוארים הרכיבים והמאפיינים של מדיניות OAuthV2.
המדיניות לדוגמה שמוצגת בהמשך היא אחת מההגדרות האפשריות רבות. בדוגמה הזו רואים מדיניות OAuthV2 שהוגדרה לפעולה GenerateAccessToken. היא כוללת רכיבים אופציונליים. לפרטים נוספים, יש לעיין בתיאורי הרכיבים בקטע הזה.
<OAuthV2 name="GenerateAccessToken"> <!-- This policy generates an OAuth 2.0 access token using the client_credentials grant type --> <Operation>GenerateAccessToken</Operation> <!-- This is in millseconds, so expire in an hour --> <ExpiresIn>3600000</ExpiresIn> <SupportedGrantTypes> <GrantType>client_credentials</GrantType> </SupportedGrantTypes> <GrantType>request.queryparam.grant_type</GrantType> <GenerateResponse/> </OAuthV2>
<OAuthV2> מאפיינים
<OAuthV2 async="false" continueOnError="false" enabled="true" name="MyOAuthPolicy">
בטבלה הבאה מתוארים מאפיינים שמשותפים לכל רכיבי ההורה של המדיניות:
מאפיין | תיאור | ברירת מחדל | נוכחות |
---|---|---|---|
name |
השם הפנימי של המדיניות. הערך של המאפיין אפשר להשתמש ברכיב |
לא רלוונטי | חובה |
continueOnError |
צריך להגדיר את הערך יש להגדיר ל- |
false | אופציונלי |
enabled |
צריך להגדיר את הערך צריך להגדיר את הערך |
true | אופציונלי |
async |
המאפיין הזה הוצא משימוש. |
false | הוצא משימוש |
<DisplayName> רכיב
צריך להשתמש בנוסף למאפיין name
כדי להוסיף תווית למדיניות
עורך proxy של ממשק משתמש לניהול עם שם אחר בשפה טבעית.
<DisplayName>Policy Display Name</DisplayName>
ברירת מחדל |
לא רלוונטי אם משמיטים את הרכיב הזה, הערך של המאפיין |
---|---|
נוכחות | אופציונלי |
סוג | מחרוזת |
<AccessToken> רכיב
<AccessToken>request.header.access_token</AccessToken>
כברירת מחדל, VerifyAccessToken מצפה שאסימון הגישה יישלח דרך Authorization
הכותרת.
אפשר לשנות את ברירת המחדל באמצעות הרכיב הזה. עבור
הדוגמה request.queryparam.access_token
מציינת שאסימון הגישה
צריך להכיל פרמטר של שאילתה בשם access_token
.
<AccessToken>request.header.access_token</AccessToken>
שצוין:
curl https://myorg-myenv.apigee.net/oauth2/validate -H "access_token:Rft3dqrs56Blirls56a"דוגמה שבה הערך
<AccessToken>request.queryparam.access_token</AccessToken>
שצוין:
curl "https://myorg-myenv.apigee.net/oauth2/validate?access_token:Rft3dqrs56Blirls56a"
ברירת המחדל: |
לא רלוונטי |
נוכחות: |
אופציונלי |
סוג: | מחרוזת |
בשימוש עם פעולות: |
|
<AccessTokenPrefix> רכיב
<AccessTokenPrefix>Bearer</AccessTokenPrefix>
כברירת מחדל, VerifyAccessToken מצפה שאסימון הגישה יישלח בכותרת Authorization כאסימון למוכ"ז. לדוגמה:
-H "Authorization: Bearer Rft3dqrs56Blirls56a"
בשלב זה, נושאת היא התחילית הנתמכת היחידה.
ברירת המחדל: |
פרמטרים לרשת |
נוכחות: |
אופציונלי |
סוג: | מחרוזת |
ערכים חוקיים: |
פרמטרים לרשת |
בשימוש עם פעולות: |
|
<AppEndUser> רכיב
<AppEndUser>request.queryparam.app_enduser</AppEndUser>
במקרים שבהם צריך לשלוח את המזהה של משתמש הקצה של האפליקציה לשרת ההרשאות, הרכיב הזה מאפשר לפי המיקום שבו Edge צריך לחפש את המזהה של משתמש הקצה. לדוגמה, הוא יכול להישלח כשאילתה או בכותרת HTTP.
לדוגמה, request.queryparam.app_enduser
מציין
AppEndUser צריך להופיע כפרמטר של שאילתה, כמו
לדוגמה, ?app_enduser=ntesla@theramin.com
. כדי לחייב את משתמש ה-AppEndUser ב-HTTP
'כותרת', למשל, להגדיר את הערך הזה ל-request.header.app_enduser
.
הפעלת ההגדרה הזו מאפשרת לכלול באסימון הגישה מזהה של משתמש קצה של אפליקציה. הזה כדאי להשתמש בתכונה הזו אם רוצים לאחזר או לבטל אסימוני גישה מסוג OAuth 2.0 בסוף מזהה משתמש. מידע נוסף זמין במאמר להפעיל אחזור וביטול של אסימוני גישה מסוג OAuth 2.0 לפי מזהה משתמש קצה, מזהה אפליקציה או שניהם.
ברירת המחדל: |
לא רלוונטי |
נוכחות: |
אופציונלי |
סוג: | מחרוזת |
ערכים חוקיים: |
כל משתנה זרימה שנגיש למדיניות בזמן הריצה. |
בשימוש עם סוגי מענקים: |
|
<Attributes/Attribute>
<Attributes> <Attribute name="attr_name1" ref="flow.variable" display="true|false">value1</Attribute> <Attribute name="attr_name2" ref="flow.variable" display="true|false">value2</Attribute> </Attributes>
אפשר להשתמש ברכיב הזה כדי להוסיף מאפיינים מותאמים אישית לאסימון גישה או לקוד הרשאה. עבור ייתכן שתרצו להטמיע מזהה משתמש או מזהה סשן באסימון גישה שחולץ ונבדק בזמן הריצה.
הרכיב הזה מאפשר לציין ערך במשתנה זרימה או ממחרוזת מילולית. אם לציין גם משתנה וגם מחרוזת, המערכת תשתמש בערך שצוין במשתנה הזרימה. אם לא ניתן לפענח את המשתנה, המחרוזת היא ברירת המחדל.
למידע נוסף על השימוש ברכיב הזה, ראו התאמה אישית של אסימונים קודי הרשאות.
הצגה או הסתרה של מאפיינים מותאמים אישית במסגרת תשובה
חשוב לזכור שאם מגדירים את רכיב GenerateResponse של המדיניות הזו כ-true, ייצוג ה-JSON המלא של האסימון מוחזר בתגובה, כולל למאפיינים שאתם מגדירים. במקרים מסוימים, ייתכן שתרצו להסתיר חלק מהנתונים בהתאמה אישית או את כולם מאפיינים בתגובה כך שלא יהיו גלויים לאפליקציות לקוח.
כברירת מחדל, מאפיינים מותאמים אישית יופיעו בתשובה. אם רוצים להסתיר אותן, אפשר להגדיר בפרמטר display מוגדר כ-false. לדוגמה:
<Attributes> <Attribute name="employee_id" ref="employee.id" display="false"/> <Attribute name="employee_name" ref="employee.name" display="false"/> </Attributes>
ערך המאפיין display
אינו
נמשך. נניח שיצרתם אסימון גישה עם מאפיינים מותאמים אישית שאתם רוצים להסתיר
שנוצרת. הגדרה של display=false
מובילה להשגת היעד הזה. אבל אם מודל
אסימון הגישה נוצר מאוחר יותר באמצעות אסימון רענון, המאפיינים המותאמים אישית המקוריים
אסימון הגישה יופיע בתגובה של אסימון הרענון. הסיבה לכך היא ש-Edge לא זוכר
במדיניות של יצירת אסימון גישה, המאפיין display
הוגדר במקור כ-false
הוא פשוט חלק מהמטא נתונים של אסימון הגישה.
אותה התנהגות תופיע אם תוסיפו מאפיינים מותאמים אישית לקוד הרשאה – כאשר אסימון הגישה נוצר באמצעות הקוד הזה, המאפיינים המותאמים אישית יופיעו באסימון הגישה תשובה. שוב, יכול להיות שזו לא ההתנהגות שהתכוונתם לכך.
כדי להסתיר את ההתאמה האישית במקרים כאלה, תוכלו לבחור מבין האפשרויות הבאות:
- לאפס במפורש את המאפיינים המותאמים אישית במדיניות של אסימון הרענון ולהגדיר את התצוגה שלהם לערך לא נכון. במקרה כזה, ייתכן שתצטרכו לאחזר את הערכים המותאמים אישית המקוריים מהמקור אסימון גישה באמצעות המדיניות GetOAuthV2Info.
- אפשר להשתמש במדיניות JavaScript לאחר העיבוד כדי לחלץ באופן ידני מאפיינים מותאמים אישית שלא כוללים שאתם רוצים לראות בתשובה.
ראה גם התאמה אישית של אסימונים ו קודי הרשאות.
ברירת המחדל: |
|
נוכחות: |
אופציונלי |
ערכים חוקיים: |
|
בשימוש עם סוגי מענקים: |
|
<ClientId> רכיב
<ClientId>request.formparam.client_id</ClientId>
במקרים מסוימים, אפליקציית הלקוח חייבת לשלוח את מספר הלקוח לשרת ההרשאות. הזה
מאפשר לציין את המיקום שבו Edge צריך לחפש את מזהה הלקוח. הערכים התקפים היחידים
המיקום שאפשר להגדיר הוא ברירת המחדל
המיקום, משתנה הזרימה request.formparam.client_id
. מתבצעת הגדרה של ClientId
לכל משתנה אחר שלא נתמך.
כדאי לעיין גם במאמר בקשת אסימוני גישה והרשאה
קודים.
ברירת המחדל: |
request.formparam.client_id (כתובת x-www-form-url מקודדת ומצוינת בבקשה גוף ההודעה) |
נוכחות: |
אופציונלי |
סוג: | מחרוזת |
ערכים חוקיים: | משתנה הזרימה: request.formparam.client_id |
בשימוש עם סוגי מענקים: |
אפשר להשתמש בו גם עם הפעולה GenerateAuthorizationCode. |
<Code> רכיב
<Code>request.queryparam.code</Code>
בתהליך של סוג הענקת ההרשאה, הלקוח צריך לשלוח קוד הרשאה שרת הרשאות (Apigee Edge). הרכיב הזה מאפשר לכם לציין איפה Edge צריך לחפש את קוד הרשאה. לדוגמה, אפשר לשלוח אותו כפרמטר של שאילתה, ככותרת HTTP או כטופס פרמטר (ברירת המחדל).
המשתנה request.queryparam.auth_code
מציין
את קוד ההרשאה יש לציין כפרמטר של שאילתה, כמו במקרה
לדוגמה, ?auth_code=AfGlvs9
. לדרוש את קוד ההרשאה ב-HTTP
'כותרת', למשל, להגדיר את הערך הזה ל-request.header.auth_code
. עוד באותו הקשר
בקשת אסימוני גישה ו
קודי הרשאה.
ברירת המחדל: |
request.formparam.code (a x-www-form-urlencoded ומצוין בגוף הבקשה) |
נוכחות: |
אופציונלי |
סוג: | מחרוזת |
ערכים חוקיים: | כל משתנה זרימה שנגיש למדיניות בזמן הריצה |
בשימוש עם סוגי מענקים: | authorization_code |
<ExpiresIn> רכיב
<ExpiresIn>10000</ExpiresIn>
אוכפת את מועד התפוגה של אסימוני גישה וקודי הרשאות באלפיות שנייה. (עבור
אסימוני רענון, יש להשתמש ב-<RefreshTokenExpiresIn>
.) ערך זמן התפוגה הוא
שנוצר על ידי המערכת, בתוספת הערך <ExpiresIn>
. אם המיקום
הערך של <ExpiresIn>
מוגדר לערך -1, תוקף האסימון או הקוד פג בהתאם לתפוגת התוקף המקסימלית של אסימון גישה ל-OAuth.
אם אין הגדרה של <ExpiresIn>
, המערכת תחיל
ערך ברירת המחדל שהוגדר ברמת המערכת.
ניתן להגדיר את זמן התפוגה גם בזמן הריצה באמצעות ערך ברירת מחדל שמופיע בתוך הקוד, או
שמפנה למשתנה זרימה. לדוגמה, אפשר לאחסן ערך תפוגה של אסימון בערך מפתח
למפות, לאחזר, להקצות אותו למשתנה ולהפנות אליו במדיניות. לדוגמה,
kvm.oauth.expires_in
באמצעות Apigee Edge for Public Cloud, דפדפן Edge שומר הישויות הבאות נשמרו במטמון למשך 180 שניות לפחות לאחר הגישה לישויות.
- אסימוני גישה מסוג OAuth. המשמעות היא שאסימון שבוטל עדיין יכול להצליח עבור עד שלושה דקות, עד שמגבלת המטמון שלו תפוג.
- ישויות של שירות ניהול מפתחות (KMS) (אפליקציות, מפתחים, מוצרי API).
- מאפיינים מותאמים אישית באסימוני OAuth ובישויות KMS.
הבית הבא מציין משתנה זרימה וגם ערך ברירת מחדל. שימו לב שהתהליך המשתנה מקבל קדימות על פני ערך ברירת המחדל שצוין.
<ExpiresIn ref="kvm.oauth.expires_in"> 3600000 <!--default value in milliseconds--> </ExpiresIn>
Edge לא תומך בדרך לאלץ את תפוגת התוקף של אסימון לאחר שהוא נוצר. אם אתם צריכים לאלץ את תפוגת התוקף של אסימון (לדוגמה, על סמך תנאי מסוים), פתרון אפשרי הוא מתואר ב את הפוסט הזה לקהילה ב-Apigee
כברירת מחדל, אסימוני גישה שתוקפם פג נמחקים מ-Apigee באופן סופי מערכת Edge אוטומטית 3 ימים אחרי התפוגה. אפשר לקרוא גם מידע מהיר על גישה מהירה אסימונים
ענן פרטי: ב-Edge להתקנת ענן פרטי, ברירת המחדל היא
מוגדר על ידי המאפיין conf_keymanagement_oauth_auth_code_expiry_time_in_millis
.
כדי להגדיר את הנכס הזה:
- פותחים את הקובץ
message-processor.properties
בעורך. אם הקובץ לא קיים, יוצרים אותו:vi /opt/apigee/customer/application/message-processor.properties
- מגדירים את הנכס הרצוי:
conf_keymanagement_oauth_auth_code_expiry_time_in_millis=3600000
- צריך לוודא שקובץ המאפיינים נמצא בבעלות ה-apigee user:
chown apigee:apigee /opt/apigee/customer/application/message-processor.properties
- צריך להפעיל מחדש את מעבד ההודעות.
/opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
ברירת המחדל: |
אם לא צוין ערך, המערכת תחיל את ערך ברירת המחדל שהוגדר במערכת ברמה. |
נוכחות: |
אופציונלי |
סוג: | מספר שלם |
ערכים חוקיים: |
|
בשימוש עם סוגי מענקים: |
משמש גם עם הפעולה GenerateAuthorizationCode. |
<ExternalAccessToken> רכיב
<ExternalAccessToken>request.queryparam.external_access_token</ExternalAccessToken>
מציין ל-Apigee Edge איפה למצוא אסימון גישה חיצוני (אסימון גישה שלא נוצר על ידי Apigee Edge).
המשתנה request.queryparam.external_access_token
מציין
אסימון הגישה החיצוני צריך להופיע כפרמטר של שאילתה, כמו
לדוגמה, ?external_access_token=12345678
. כדי לדרוש אסימון גישה חיצוני
בכותרת HTTP. לדוגמה, מגדירים את הערך הזה
אל request.header.external_access_token
. למידע נוסף, ראו שימוש ב-OAuth של צד שלישי
אסימונים.
<ExternalAuthorization> רכיב
<ExternalAuthorization>true</ExternalAuthorization>
אם הרכיב הזה מוגדר כ-False או לא קיים, Edge יאמת את ערכי client_id ו-client_secret בדרך כלל מול מאגר ההרשאות של Apigee Edge. השתמשו ברכיב הזה כשאתם רוצים לעבוד עם אסימוני OAuth של צד שלישי. לפרטים על השימוש ברכיב הזה, כדאי לעיין במאמר שימוש ב-OAuth של צד שלישי אסימונים.
ברירת המחדל: |
false |
נוכחות: |
אופציונלי |
סוג: | ערך בוליאני |
ערכים חוקיים: | נכון או לא נכון |
בשימוש עם סוגי מענקים: |
|
<ExternalAuthorizationCode> רכיב
<ExternalAuthorizationCode>request.queryparam.external_auth_code</ExternalAuthorizationCode>
מציין ל-Apigee Edge איפה למצוא קוד אימות חיצוני (קוד הרשאה שלא נוצר על ידי Apigee Edge).
המשתנה request.queryparam.external_auth_code
מציין
קוד ההרשאה החיצוני צריך להופיע כפרמטר של שאילתה, כי,
לדוגמה, ?external_auth_code=12345678
. כדי לדרוש אימות חיצוני
קוד
בכותרת HTTP. לדוגמה, מגדירים את הערך הזה
אל request.header.external_auth_code
. למידע נוסף, ראו שימוש ב-OAuth של צד שלישי
אסימונים.
<ExternalRefreshToken> רכיב
<ExternalRefreshToken>request.queryparam.external_refresh_token</ExternalRefreshToken>
מציין ל-Apigee Edge איפה למצוא אסימון רענון חיצוני (אסימון רענון שלא נוצר על ידי Apigee Edge).
המשתנה request.queryparam.external_refresh_token
מציין
אסימון הרענון החיצוני צריך להופיע כפרמטר של שאילתה, כמו
לדוגמה, ?external_refresh_token=12345678
. כדי לדרוש אסימון הרענון החיצוני
בכותרת HTTP. לדוגמה, מגדירים את הערך הזה
אל request.header.external_refresh_token
. למידע נוסף, ראו שימוש ב-OAuth של צד שלישי
אסימונים.
<GenerateResponse> רכיב
<GenerateResponse enabled='true'/>
אם המדיניות מוגדרת לערך true
, המדיניות יוצרת ומחזירה תשובה. לדוגמה,
GenerateAccessToken, התגובה עשויה להיות:
{ "issued_at" : "1467841035013", "scope" : "read", "application_name" : "e31b8d06-d538-4f6b-9fe3-8796c11dc930", "refresh_token_issued_at" : "1467841035013", "status" : "approved", "refresh_token_status" : "approved", "api_product_list" : "[Product1, nhl_product]", "expires_in" : "1799", "developer.email" : "edward@slalom.org", "token_type" : "BearerToken", "refresh_token" : "rVSmm3QaNa0xBVFbUISz1NZI15akvgLJ", "client_id" : "Adfsdvoc7KX5Gezz9le745UEql5dDmj", "access_token" : "AnoHsh2oZ6EFWF4h0KrA0gC5og3a", "organization_name" : "cerruti", "refresh_token_expires_in" : "0", "refresh_count" : "0" }
אם הערך שלו הוא false
, לא תישלח תשובה. במקום זאת, קבוצה של משתני זרימה
עם ערכים שקשורים לפונקציה של המדיניות. לדוגמה, משתנה זרימה שנקרא
oauthv2authcode.OAuthV2-GenerateAuthorizationCode.code
מאוכלס
הונפקה קוד הרשאה. שימו לב שהביטוי expires_in מתבטא בשניות
תשובה.
ברירת המחדל: |
false |
נוכחות: |
אופציונלי |
סוג: | מחרוזת |
ערכים חוקיים: | נכון או לא נכון |
בשימוש עם סוגי מענקים: |
|
<GenerateErrorResponse> רכיב
<GenerateErrorResponse enabled='true'/>
אם המדיניות מוגדרת לערך true
, המדיניות תיצור ותחזיר תשובה אם
המאפיין ContinueOnError מוגדר כ-True. אם הערך הוא false
(ברירת המחדל), לא
תשובה תישלח. במקום זאת, קבוצה של משתני זרימה מאוכלסת בערכים שקשורים
של המדיניות.
ברירת המחדל: |
false |
נוכחות: |
אופציונלי |
סוג: | מחרוזת |
ערכים חוקיים: | נכון או לא נכון |
בשימוש עם סוגי מענקים: |
|
<GrantType>
<GrantType>request.queryparam.grant_type</GrantType>
מציין למדיניות איפה למצוא את הפרמטר של סוג המענק שמועבר בבקשה. בהתאם מפרט OAuth 2.0, יש לספק את סוג ההרשאה עם בקשות לאסימוני גישה קודי הרשאה. המשתנה יכול להיות כותרת, פרמטר של שאילתה או פרמטר של טופס (ברירת מחדל).
לדוגמה request.queryparam.grant_type
מציין שהסיסמה
צריך להכיל פרמטר של שאילתה, כמו, לדוגמה, ?grant_type=password
.
כדי לחייב את סוג המענק בכותרת HTTP, למשל, צריך להגדיר את הערך הזה
אל request.header.grant_type
. כדאי לעיין גם במאמר בקשת אסימוני גישה והרשאה
קודים.
ברירת המחדל: |
request.formparam.grant_type (קובץ x-www-form-urlencoded ומצוין בבקשה גוף ההודעה) |
נוכחות: |
אופציונלי |
סוג: | מחרוזת |
ערכים חוקיים: | משתנה, כפי שהוסבר למעלה. |
בשימוש עם סוגי מענקים: |
|
<Operation> רכיב
<Operation>GenerateAuthorizationCode</Operation>
פעולת OAuth 2.0 בוצעה על ידי המדיניות.
ברירת המחדל: |
אם לא צוין |
נוכחות: |
אופציונלי |
סוג: | מחרוזת |
ערכים חוקיים: |
|
<PassWord> רכיב
<PassWord>request.queryparam.password</PassWord>
השימוש ברכיב הזה מתבצע באמצעות סוג הקצאת הסיסמה בלבד. ב-
סוג הענקת הסיסמה, פרטי הכניסה של המשתמש (סיסמה ושם משתמש) יהיו זמינים
מדיניות OAuthV2. הרכיבים <PassWord>
ו-<UserName>
הם
שמשמש לציון משתנים שבהם Edge יכול למצוא את הערכים האלה. אם הרכיבים האלה לא צוינו,
המדיניות מצפה למצוא את הערכים (כברירת מחדל) בפרמטרים של טופס שנקרא username
ו-password
. אם הערכים לא נמצאו, המדיניות תקפיץ הודעת שגיאה. אפשר להשתמש
את הרכיבים <PassWord>
ו-<UserName>
כדי להפנות
משתנה זרימה, המכיל את פרטי הכניסה.
לדוגמה, תוכלו להעביר את הסיסמה בבקשת אסימון באמצעות פרמטר של שאילתה, ולהגדיר
רכיב כזה:
<PassWord>request.queryparam.password</PassWord>
.
אל
נדרשת סיסמה בכותרת HTTP, יש להגדיר את הערך הזה
אל request.header.password
.
מדיניות OAuthV2 לא משפיעה על ערכי פרטי הכניסה האלה. Edge פשוט כדי לאמת את נוכחותם. מפתח ה-API הוא זה שיאחזר את בקשת הערכים שולחים אותם לספק זהויות לפני שמדיניות יצירת האסימון מופעלת.
כדאי לעיין גם במאמר בקשת אסימוני גישה וקודי הרשאה.
ברירת המחדל: |
request.formparam.password (ax-www-form-urlencoded ומצוין בבקשה גוף ההודעה) |
נוכחות: |
אופציונלי |
סוג: | מחרוזת |
ערכים חוקיים: | כל משתנה זרימה שזמין למדיניות בזמן הריצה. |
בשימוש עם סוגי מענקים: | סיסמה |
<RedirectUri> רכיב
<RedirectUri>request.queryparam.redirect_uri</RedirectUri>
מציינת איפה דפדפן Edge צריך לחפש את הפרמטר redirect_uri
בקשה.
מידע על מזהי URI של הפניה אוטומטית
מזהי URI של הפניות אוטומטיות משמשים עם קוד ההרשאה וסוגי הענקה המשתמעת. ההפניה האוטומטית URI מורה לשרת ההרשאות (Edge) לאן לשלוח קוד הרשאה (עבור קוד ההרשאה) סוג הענקת) או אסימון גישה (לסוג הענקת גישה משתמע). חשוב להבין מתי זהו פרמטר חובה, אם הוא אופציונלי ואיך משתמשים בו:
-
(חובה) אם כתובת URL לקריאה חוזרת (callback) רשומה באפליקציה למפתחים שמשויכת אל מפתחות הלקוח של הבקשה, ואם
redirect_uri
מופיע בבקשה, שניהם חייבים להיות זהים. אם הם לא תואמים, תוחזר שגיאה. למידע מידע על רישום אפליקציות למפתחים ב-Edge וציון כתובת URL לקריאה חוזרת. מידע נוסף זמין בקטע רישום אפליקציות וניהול API . - (אופציונלי) אם רשומה כתובת URL לקריאה חוזרת (callback), והשדה
redirect_uri
חסר מהבקשה, Edge יפנה אוטומטית לכתובת ה-URL הרשומה לקריאה חוזרת (callback). - (חובה) אם לא רשומה כתובת URL לקריאה חוזרת, הערך של
redirect_uri
הוא נדרש. שימו לב שבמקרה הזה, Edge יקבל כל כתובת URL. במקרה הזה יכול להיות בעיית אבטחה, ולכן יש להשתמש בו רק עם לקוח מהימן של האפליקציות. אם אפליקציות הלקוח לא מהימנות, השיטה המומלצת היא תמיד לדרוש רישום של כתובת URL לקריאה חוזרת (callback).
תוכלו לשלוח את הפרמטר הזה בפרמטר של שאילתה או בכותרת.
המשתנה request.queryparam.redirect_uri
מציין שה-RedirectUri
צריך להיות נוכח כפרמטר של שאילתה, כמו
לדוגמה, ?redirect_uri=login.myapp.com
. לדרוש הפניה מחדש ב-HTTP
'כותרת', למשל, להגדיר את הערך הזה ל-request.header.redirect_uri
. צפייה
גם בקשת אסימוני גישה
קודי הרשאה.
ברירת המחדל: |
request.formparam.redirect_uri (קובץ x-www-form-urlencoded ומצוין בבקשה גוף ההודעה) |
נוכחות: |
אופציונלי |
סוג: | מחרוזת |
ערכים חוקיים: | כל משתנה זרימה שניתן לגשת אליו במדיניות בזמן הריצה |
בשימוש עם סוגי מענקים: |
משמש גם עם הפעולה GenerateAuthorizationCode. |
<RefreshToken> רכיב
<RefreshToken>request.queryparam.refreshtoken</RefreshToken>
כשמבקשים אסימון גישה באמצעות אסימון רענון, צריך לספק את אסימון הרענון לבקשה. הרכיב הזה מאפשר לציין איפה דפדפן Edge צריך לחפש את אסימון הרענון. עבור לדוגמה, הוא יכול להישלח כפרמטר של שאילתה, ככותרת HTTP או כפרמטר של טופס (ברירת המחדל).
המשתנה request.queryparam.refreshtoken
מציין שהרענון
את האסימון צריך להופיע כפרמטר של שאילתה, כמו
לדוגמה, ?refresh_token=login.myapp.com
. לחייב את אסימון הרענון ב-HTTP
'כותרת', למשל, להגדיר את הערך הזה ל-request.header.refresh_token
. צפייה
גם בקשת אסימוני גישה
קודי הרשאה.
ברירת המחדל: |
request.formparam.refresh_token (קובץ x-www-form-urlencoded ומצוין בבקשה גוף ההודעה) |
נוכחות: |
אופציונלי |
סוג: | מחרוזת |
ערכים חוקיים: | כל משתנה זרימה שניתן לגשת אליו במדיניות בזמן הריצה |
בשימוש עם סוגי מענקים: |
|
<RefreshTokenExpiresIn> רכיב
<RefreshTokenExpiresIn>1000</RefreshTokenExpiresIn>
אכיפת מועד התפוגה של אסימוני רענון באלפיות שנייה. ערך מועד התפוגה הוא מערכת
שנוצר, בתוספת הערך <RefreshTokenExpiresIn>
. אם המיקום
<RefreshTokenExpiresIn>
מוגדר להיות -1, אסימון הרענון
יפוג בהתאם לתאריך התפוגה המקסימלי של אסימון רענון של OAuth. אם לא צוין <RefreshTokenExpiresIn>
,
המערכת מחילה ערך ברירת מחדל שהוגדר ברמת המערכת. למידע נוסף, אפשר לפנות לתמיכה של Apigee Edge
מידע על הגדרות ברירת המחדל של המערכת.
ניתן להגדיר את זמן התפוגה גם בזמן הריצה באמצעות ערך ברירת מחדל שמופיע בתוך הקוד, או
שמפנה למשתנה זרימה. לדוגמה, אפשר לאחסן ערך תפוגה של אסימון בערך מפתח
למפות, לאחזר, להקצות אותו למשתנה ולהפנות אליו במדיניות. עבור
לדוגמה, kvm.oauth.expires_in
.
הבית הבא מציין משתנה זרימה וגם ערך ברירת מחדל. שימו לב שהתהליך המשתנה מקבל קדימות על פני ערך ברירת המחדל שצוין.
<RefreshTokenExpiresIn ref="kvm.oauth.expires_in"> 3600000 <!--default value in milliseconds--> </RefreshTokenExpiresIn>
ענן פרטי: ב-Edge להתקנת ענן פרטי, ברירת המחדל היא
מוגדר על ידי המאפיין conf_keymanagement_oauth_refresh_token_expiry_time_in_millis
.
כדי להגדיר את הנכס הזה:
- פותחים את הקובץ
message-processor.properties
בעורך. אם הקובץ לא קיים, יוצרים אותו:vi /opt/apigee/customer/application/message-processor.properties
- מגדירים את הנכס הרצוי:
conf_keymanagement_oauth_refresh_token_expiry_time_in_millis=3600000
- צריך לוודא שקובץ המאפיינים נמצא בבעלות ה-apigee user:
chown apigee:apigee /opt/apigee/customer/application/message-processor.properties
- צריך להפעיל מחדש את מעבד ההודעות.
/opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
ברירת המחדל: |
63072000000 אלפיות השנייה (שנתיים) (החל מ-5 באוגוסט 2024) |
נוכחות: |
אופציונלי |
סוג: | מספר שלם |
ערכים חוקיים: |
|
בשימוש עם סוגי מענקים: |
|
<ResponseType> רכיב
<ResponseType>request.queryparam.response_type</ResponseType>
הרכיב הזה מיידע את Edge לגבי סוג ההרשאה שהאפליקציה של הלקוח מבקשת. הוא נמצא בשימוש רק עם את קוד ההרשאה ותהליכי סוג ההענקה המשתמע.
כברירת מחדל, Edge מחפש את הערך של סוג התגובה בשאילתה response_type
הפרמטר. אם ברצונך לשנות את התנהגות ברירת המחדל הזו, אפשר להשתמש בפקודה <ResponseType> רכיב ל-
להגדיר משתנה זרימה שמכיל את הערך של סוג התגובה. לדוגמה, אם מגדירים את הקוד הזה
אל request.header.response_type
, Edge מחפש את סוג התגובה
מועבר בכותרת הבקשה. כדאי לעיין גם במאמר בקשת אסימוני גישה והרשאה
קודים.
ברירת המחדל: |
request.formparam.response_type (קוד x-www-form-urlencoded ומצוין בבקשה גוף ההודעה) |
נוכחות: |
זה שינוי אופציונלי. צריך להשתמש ברכיב הזה אם רוצים לשנות את התנהגות ברירת המחדל. |
סוג: | מחרוזת |
ערכים חוקיים: | code (לסוג הענקת קוד ההרשאה) או token
(לסוג ההענקה המשתמעת) |
בשימוש עם סוגי מענקים: |
|
<ReuseRefreshToken> רכיב
<ReuseRefreshToken>true</ReuseRefreshToken>
אם המדיניות מוגדרת לערך true
, נעשה שימוש חוזר באסימון הרענון הקיים עד שהתוקף שלו יפוג. אם המיקום
false
, אסימון רענון חדש מונפק על ידי Apigee Edge כשאסימון רענון חוקי
של הסרטון.
ברירת המחדל: |
|
נוכחות: |
אופציונלי |
סוג: | בוליאני |
ערכים חוקיים: |
|
בשימוש עם סוג המענק: |
|
<Scope> רכיב
<Scope>request.queryparam.scope</Scope>
אם הרכיב הזה מופיע באחד מהאסימון GenerateAccessToken או GenerateAuthorizationCode
מדיניות, היא משמשת כדי לציין אילו היקפים להעניק את האסימון או את הקוד. הערכים האלה הם
בדרך כלל מועברים למדיניות בבקשה מאפליקציית לקוח. אפשר להגדיר את הרכיב
משתנה זרימה, כך שתהיה לכם אפשרות לבחור איך ההיקפים יועברו בבקשה. לחשבון
הדוגמה הבאה, request.queryparam.scope
מציינת שההיקף צריך
מופיע בתור פרמטר של שאילתה, כמו, לדוגמה, ?scope=READ
. כדי לדרוש
בכותרת HTTP. לדוגמה, מגדירים את הערך הזה
אל request.header.scope
.
אם הרכיב הזה מופיע ב-"VerifyAccessToken" המדיניות הזו משמשת כדי לציין את היקפי ההרשאות שהמדיניות צריכה לאכוף. במדיניות מהסוג הזה, הערך חייב להיות 'בקידוד קשיח' היקף name – לא ניתן להשתמש במשתנים. לדוגמה:
<Scope>A B</Scope>
ראו גם עבודה עם OAuth2 היקפי הרשאות ובקשת אסימוני גישה וקודי הרשאה.
ברירת המחדל: |
אין היקף הרשאות |
נוכחות: |
אופציונלי |
סוג: | מחרוזת |
ערכים חוקיים: |
אם משתמשים בו יחד עם מדיניות Generate*, משתנה זרימה. אם נעשה בו שימוש עם VerifyAccessToken, רשימה של שמות היקפים (מחרוזות) שמופרדים באמצעות רווח. |
בשימוש עם סוגי מענקים: |
|
<State> רכיב
<State>request.queryparam.state</State>
במקרים שבהם אפליקציית הלקוח חייבת לשלוח את פרטי המצב לשרת ההרשאות, בעזרת הרכיב הזה אפשר לציין איפה דפדפן Edge צריך לחפש את ערכי המצב. לדוגמה, ייתכן יישלחו כפרמטר של שאילתה או בכותרת HTTP. ערך המצב משמש בדרך כלל אמצעי אבטחה למניעת התקפות CSRF.
לדוגמה request.queryparam.state
מציין שהמדינה צריכה להיות
מופיע בתור פרמטר של שאילתה, כמו, לדוגמה, ?state=HjoiuKJH32
. לדרוש
את המצב בכותרת HTTP. לדוגמה, מגדירים את הערך
אל request.header.state
. כדאי לעיין גם במאמר בקשת אסימוני גישה והרשאות
קודים.
ברירת המחדל: |
אין מדינה |
נוכחות: |
אופציונלי |
סוג: | מחרוזת |
ערכים חוקיים: | כל משתנה זרימה שנגיש למדיניות בזמן הריצה |
בשימוש עם סוגי מענקים: |
|
<StoreToken> רכיב
<StoreToken>true</StoreToken>
הגדרת הרכיב הזה כ-true
כאשר <ExternalAuthorization>
הרכיב הוא true
. הרכיב <StoreToken>
מורה ל-Apigee Edge
אחסון של אסימון הגישה החיצוני. אחרת, היא לא תישאר בתוקף.
ברירת המחדל: |
false |
נוכחות: |
אופציונלי |
סוג: | ערך בוליאני |
ערכים חוקיים: | נכון או לא נכון |
בשימוש עם סוגי מענקים: |
|
<SupportedGrantTypes>/<GrantType> רכיב
<SupportedGrantTypes> <GrantType>authorization_code</GrantType> <GrantType>client_credentials</GrantType> <GrantType>implicit</GrantType> <GrantType>password</GrantType> </SupportedGrantTypes>
מציינת את סוגי ההרשאות שנתמכות על ידי נקודת קצה של אסימון OAuth ב-Apigee Edge. נקודת קצה עשויה
לתמוך בכמה סוגי הרשאות (כלומר, אפשר להגדיר נקודת קצה אחת לחלוקת גישה)
אסימונים עבור מספר סוגי הענקות.) מידע נוסף על נקודות קצה זמין במאמר הסבר על OAuth
נקודות קצה (endpoints). סוג המענק מועבר בבקשות לאסימונים ב-grant_type
הפרמטר.
אם לא מציינים סוגי הענקות נתמכים, סוגי ההענקה המותרים היחידים הם
authorization_code
וגם implicit
ניתן לעיין גם ברכיב <GrantType> (שהוא רכיב ברמה גבוהה יותר שמשמש כדי
לציין איפה ב-Apigee Edge צריך לחפש את הפרמטר grant_type
שמועבר
לבקשת לקוח. Edge יוודא שהערך של הפרמטר grant_type
תואם לאחד מסוגי ההענקות הנתמכים).
ברירת המחדל: |
הרשאה _קוד ומשתמע |
נוכחות: |
חובה |
סוג: | מחרוזת |
ערכים חוקיים: |
|
<Tokens>/<Token> רכיב
משמש יחד עם הפעולות VerifyToken ו-ANRateToken. ראו גם אישור
שלילת אסימוני גישה. האסימון <Token> מזהה את משתנה הזרימה שמגדיר
מקור האסימון שצריך לבטל. אם המפתחים צפויים לשלוח אסימוני גישה כ-
פרמטרים של שאילתה בשם access_token
, לדוגמה,
להשתמש ב-request.queryparam.access_token
.
<UserName> רכיב
<UserName>request.queryparam.user_name</UserName>
השימוש ברכיב הזה מתבצע באמצעות סוג הקצאת הסיסמה בלבד. ב-
סוג הענקת הסיסמה, פרטי הכניסה של המשתמש (סיסמה ושם משתמש) יהיו זמינים
מדיניות OAuthV2. הרכיבים <PassWord>
ו-<UserName>
הם
שמשמש לציון משתנים שבהם Edge יכול למצוא את הערכים האלה. אם הרכיבים האלה לא צוינו,
המדיניות מצפה למצוא את הערכים (כברירת מחדל) בפרמטרים של טופס שנקרא username
ו-password
. אם הערכים לא נמצאו, המדיניות תקפיץ הודעת שגיאה. אפשר להשתמש
את הרכיבים <PassWord>
ו-<UserName>
כדי להפנות
משתנה זרימה, המכיל את פרטי הכניסה.
לדוגמה, תוכלו להעביר את שם המשתמש בפרמטר של שאילתה ולהגדיר את
רכיב <UserName>
כמו זה:
<UserName>request.queryparam.username</UserName>
.
כדי לדרוש
שם המשתמש בכותרת HTTP, מגדירים את הערך הזה
אל request.header.username
.
מדיניות OAuthV2 לא משפיעה על ערכי פרטי הכניסה האלה. Edge פשוט כדי לאמת את נוכחותם. מפתח ה-API הוא זה שיאחזר את בקשת הערכים שולחים אותם לספק זהויות לפני שמדיניות יצירת האסימון מופעלת.
כדאי לעיין גם במאמר בקשת אסימוני גישה וקודי הרשאה.
ברירת המחדל: |
request.formparam.username (a x-www-form-urlencoded ומצוין בבקשה גוף ההודעה) |
נוכחות: |
אופציונלי |
סוג: | מחרוזת |
ערכים חוקיים: | כל הגדרה של משתנה. |
בשימוש עם סוגי מענקים: | סיסמה |
אימות הגישה אסימונים
לאחר הגדרת נקודת קצה של אסימון לשרת proxy ל-API, מדיניות OAuthV2 תואמת
מציינת את הפעולה VerifyAccessToken
מצורפת לתהליך שחושף את
הוא משאב מוגן.
לדוגמה, כדי לוודא שכל הבקשות ל-API מורשות, המדיניות הבאה אוכפת אימות של אסימון גישה:
<OAuthV2 name="VerifyOAuthAccessToken"> <Operation>VerifyAccessToken</Operation> </OAuthV2>
המדיניות מצורפת למשאב ה-API שצריך להגן עליו. כדי להבטיח שכל הבקשות ה-API מאומת. צריך לצרף את המדיניות לבקשת PreFlow של ה-ProxyEndpoint, באופן הבא:
<PreFlow> <Request> <Step><Name>VerifyOAuthAccessToken</Name></Step> </Request> </PreFlow>
אפשר להשתמש ברכיבים האופציונליים הבאים כדי לשנות את הגדרות ברירת המחדל של פעולת VerifyAccessToken.
שם | תיאור |
---|---|
היקף |
רשימה של היקפים שמופרדת ברווחים. האימות יצליח אם לפחות אחד ההיקפים שמפורטים באסימון הגישה. לדוגמה, המדיניות הבאה בודקים את אסימון הגישה כדי לוודא שהוא מכיל לפחות אחד מההיקפים שמופיעים. אם המיקום לקריאה או לכתיבה, האימות להצליח. <OAuthV2 name="ValidateOauthScopePolicy"> <Operation>VerifyAccessToken</Operation> <Scope>READ WRITE</Scope> </OAuthV2> |
AccessToken | המשתנה שבו צפוי למקם את אסימון הגישה. לדוגמה
request.queryparam.accesstoken כברירת מחדל, אסימון הגישה צפוי להיות
מוצגת על ידי האפליקציה בכותרת Authorization HTTP, בהתאם למפרט OAuth 2.0. שימוש בטיוטה הזו
הגדרה אם אסימון הגישה צפוי להופיע במיקום לא סטנדרטי,
פרמטר של שאילתה או כותרת HTTP בשם שאינו Authorization. |
מידע נוסף זמין בקטע אימות גישה אסימוני גישה ובקשת אסימוני גישה וקודי הרשאה.
ציון מיקומים של משתנים בבקשה
לגבי כל סוג הענקה, המדיניות מתבססת על הנחות לגבי המיקום או המידע הנדרש בהודעות של בקשות. ההנחות האלה מבוססות על מפרט OAuth 2.0. אם האפליקציות שלך צריכה לסטות מהמפרט של OAuth 2.0, אז ניתן לציין את המיקומים הצפויים עבור של כל פרמטר. לדוגמה, כאשר מטפלים בקוד הרשאה, תוכלו לציין את המיקום של קוד ההרשאה, מזהה הלקוח, ה-URI להפניה אוטומטית וההיקף. אפשר לציין אותן כך: כותרות HTTP, פרמטרים של שאילתה או פרמטרים של טופס.
הדוגמה הבאה ממחישה איך מציינים את המיקום של קוד ההרשאה הנדרש ככותרות HTTP:
... <GrantType>request.header.grant_type</GrantType> <Code>request.header.code</Code> <ClientId>request.header.client_id</ClientId> <RedirectUri>request.header.redirect_uri</RedirectUri> <Scope>request.header.scope</Scope> ...
לחלופין, במקרה הצורך כדי לתמוך בבסיס האפליקציות של הלקוח, אפשר לשלב בין כותרות ושאילתות :
... <GrantType>request.header.grant_type</GrantType> <Code>request.header.code</Code> <ClientId>request.queryparam.client_id</ClientId> <RedirectUri>request.queryparam.redirect_uri</RedirectUri> <Scope>request.queryparam.scope</Scope> ...
אפשר להגדיר מיקום אחד בלבד לכל פרמטר.
משתני זרימה
משתני הזרימה שמוגדרים בטבלה הזו מאוכלסים כשכללי מדיניות ה-OAuth המתאימים מופעלות, ולכן זמינות לכללי מדיניות אחרים או לאפליקציות אחרות שפועלות בשרת ה-proxy ל-API .
פעולת VerifyAccessToken
הפעולה VerifyAccessToken מופעלת, מאוכלסים במספר גדול של משתני זרימה בהקשר הביצוע של שרת ה-proxy. המשתנים האלה מספקים מאפיינים שקשורים להרשאת הגישה אסימון, אפליקציה למפתחים, מפתח וחברה. אפשר להשתמש במדיניות AssignMessage או JavaScript, לדוגמה, לקרוא כל אחד מהמשתנים האלה ולהשתמש בהם לפי הצורך בשלב מאוחר יותר בתהליך. האלה יכולים להיות שימושיים גם לניפוי באגים.
proxy.pathsuffix
). אין צורך להגדיר באופן מפורש את המשתנה flow.resource.name.
כאשר מוצרי ה-API לא מוגדרים עם סביבות ושרתי proxy ל-API תקינים, אז
צריך להגדיר את flow.resource.name
באופן מפורש כדי לאכלס משתני מוצר של API בקובץ ה-API
. למידע נוסף על הגדרת המוצר, ראו שימוש בניהול Edge
API לפרסום ממשקי API.
משתנים ספציפיים לאסימונים
משתנים | תיאור |
---|---|
organization_name |
שם הארגון שבו שרת ה-proxy מופעל. |
developer.id |
המזהה של המפתח שמשויך לאפליקציית הלקוח הרשומה. |
developer.app.name |
שם המפתח שמשויך לאפליקציית הלקוח הרשומה. |
client_id |
מזהה הלקוח של אפליקציית הלקוח הרשומה. |
grant_type |
סוג ההרשאה שמשויך לבקשה. |
token_type |
סוג האסימון שמשויך לבקשה. |
access_token |
אסימון הגישה שנמצא בתהליך אימות. |
accesstoken.{custom_attribute} |
מאפיין מותאם אישית בעל שם באסימון הגישה. |
issued_at |
התאריך שבו הונפק אסימון הגישה, מבוטא ב-Unix זמן Epoch באלפיות השנייה. |
expires_in |
זמן התפוגה של אסימון הגישה. ביטוי ב
שניות. למרות שExpiresIn
מגדיר את התפוגה באלפיות השנייה, בתגובת האסימון
של משתני הזרימה, הערך מתבטא בשניות. |
status |
הסטטוס של אסימון הגישה (למשל, אושר או בוטל). |
scope |
ההיקף (אם יש) שמשויך לאסימון הגישה. |
apiproduct.<custom_attribute_name> |
מאפיין מותאם אישית בעל שם של מוצר ה-API שמשויך ללקוח הרשום אפליקציה. |
apiproduct.name |
השם של מוצר ה-API שמשויך לאפליקציית הלקוח הרשומה. |
revoke_reason |
(Apigee hybrid בלבד) מציין למה אסימון הגישה מבוטל. הערך יכול להיות |
משתנים ספציפיים לאפליקציה
המשתנים האלה קשורים לאפליקציה למפתחים שמשויכת לאסימון.
משתנים | תיאור |
---|---|
app.name |
|
app.id |
|
app.accessType |
|
app.callbackUrl |
|
app.status |
אושרה או בוטלה |
app.scopes |
|
app.appFamily |
|
app.apiproducts |
|
app.appParentStatus |
|
app.appType |
לדוגמה: מפתח |
app.appParentId |
|
app.created_by |
|
app.created_at |
|
app.last_modified_at |
|
app.last_modified_by |
|
app.{custom_attributes} |
מאפיין מותאם אישית בעל שם של אפליקציית הלקוח הרשומה. |
משתנים ספציפיים למפתחים
אם הערך של app.appType הוא "Company", מאפייני החברה יאוכלסו ואם הערך app.appType הוא השדה 'מפתח', ואז מאפייני המפתח מאוכלסים.
משתנים | תיאור |
---|---|
משתנים ספציפיים למפתחים | |
developer.id |
|
developer.userName |
|
developer.firstName |
|
developer.lastName |
|
developer.email |
|
developer.status |
פעיל או לא פעיל |
developer.apps |
|
developer.created_by |
|
developer.created_at |
|
developer.last_modified_at |
|
developer.last_modified_by |
|
developer.{custom_attributes} |
מאפיין מותאם אישית בעל שם של המפתח. |
משתנים ספציפיים לחברה
אם הערך של app.appType הוא "Company", מאפייני החברה יאוכלסו ואם הערך app.appType הוא השדה 'מפתח', ואז מאפייני המפתח מאוכלסים.
משתנים | תיאור |
---|---|
company.id |
|
company.displayName |
|
company.apps |
|
company.appOwnerStatus |
|
company.created_by |
|
company.created_at |
|
company.last_modified_at |
|
company.last_modified_by |
|
company.{custom_attributes} |
מאפיין מותאם אישית בעל שם של החברה. |
GenerateAuthorizationCode פעולה
המשתנים האלה מוגדרים כשהפעולה GenerateAuthorizationCode מתבצעת בהצלחה:
קידומת: oauthv2authcode.{policy_name}.{variable_name}
לדוגמה: oauthv2authcode.GenerateCodePolicy.code
משתנה | תיאור |
---|---|
code |
קוד ההרשאה שנוצר כשהמדיניות מופעלת. |
redirect_uri |
ה-URI להפניה אוטומטית שמשויך לאפליקציית הלקוח הרשומה. |
scope |
היקף ההרשאות האופציונלי של OAuth שמועבר בבקשת הלקוח. |
client_id |
מזהה הלקוח שהועבר בבקשת הלקוח. |
GenerateAccessToken ו פעולות רענון
המשתנים האלה מוגדרים כשמתבצעות הפעולות GenerateAccessToken ו- RefreshAccessToken בהצלחה. חשוב לשים לב שמשתנים של אסימון רענון לא חלים על הענקת פרטי הכניסה של הלקוח .
קידומת: oauthv2accesstoken.{policy_name}.{variable_name}
לדוגמה: oauthv2accesstoken.GenerateTokenPolicy.access_token
שם משתנה | תיאור |
---|---|
access_token |
אסימון הגישה שנוצר. |
client_id |
מספר הלקוח של אפליקציית הפיתוח שמשויכת לאסימון הזה. |
expires_in |
ערך התפוגה של האסימון. ניתן לעיין ב<ExpiresIn> לפרטים נוספים. שימו לב שבתשובה, expires_in מצוין שניות. |
scope |
רשימת היקפים זמינים שהוגדרו לאסימון. איך עובדים עם היקפי הרשאות OAuth2 |
status |
approved או revoked . |
token_type |
מוגדר ל-BearerToken . |
developer.email |
כתובת האימייל של המפתח הרשום שהוא הבעלים של אפליקציית הפיתוח המשויכת באמצעות האסימון. |
organization_name |
הארגון שבו פועל שרת ה-proxy. |
api_product_list |
רשימה של המוצרים שמשויכים לאפליקציה התואמת למפתחים של האסימון. |
refresh_count |
|
refresh_token |
אסימון הרענון שנוצר. לתשומת ליבכם: לא נוצרים אסימוני רענון עבור סוג ההרשאה של פרטי הכניסה של הלקוח. |
refresh_token_expires_in |
משך החיים של אסימון הרענון, בשניות. |
refresh_token_issued_at |
ערך הזמן הזה הוא הייצוג של המחרוזת של חותמת הזמן המתאימה של 32 ביט. quantity. לדוגמה, 'יום רביעי, 21 באוגוסט 2013 19:16:47 UTC' תואם לערך של חותמת הזמן של 1377112607413. |
refresh_token_status |
approved או revoked . |
GenerateAccessTokenImplicitGrant
המשתנים האלה מוגדרים כשהפעולה GenerateAccessTokenImplicit מתבצעת בהצלחה לזרימת סוג ההענקה המשתמע.
קידומת: oauthv2accesstoken.{policy_name}.{variable_name}
לדוגמה: oauthv2accesstoken.RefreshTokenPolicy.access_token
משתנה | תיאור |
---|---|
oauthv2accesstoken.access_token |
אסימון הגישה שנוצר כשהמדיניות מופעלת. |
oauthv2accesstoken.{policy_name}.expires_in |
ערך התפוגה של האסימון, בשניות. לפרטים נוספים, אפשר לעיין ברכיב <ExpiresIn>. |
המשמעות של שגיאות
בקטע הזה מתוארים קודי השגיאה והודעות השגיאה שהוחזרו, ומשתני התקלה שמוגדרים על ידי Edge כשהמדיניות הזו גורמת לשגיאה. חשוב לדעת את המידע הזה אם אתם מפתחים כללי כשל כדי לטפל בתקלות. מידע נוסף זמין במאמר מה צריך לדעת? מידע על שגיאות שקשורות למדיניות וטיפול פגמים.
שגיאות זמן ריצה
השגיאות האלה עשויות להתרחש כשהמדיניות מופעלת.
קוד תקלה | סטטוס HTTP | סיבה | הופעל על ידי תפעול |
---|---|---|---|
steps.oauth.v2.access_token_expired |
401 | פג התוקף של אסימון הגישה. |
VerifyAccessToken |
steps.oauth.v2.access_token_not_approved |
401 | אסימון הגישה בוטל. | VerifyAccessToken |
steps.oauth.v2.apiresource_doesnot_exist |
401 | המשאב המבוקש אינו קיים באף אחד ממוצרי ה-API המשויכים אל אסימון גישה. | VerifyAccessToken |
steps.oauth.v2.FailedToResolveAccessToken |
500 | המדיניות שצפויה למצוא אסימון גישה במשתנה שצוין
רכיב <AccessToken> , אבל אי אפשר לפענח את המשתנה. |
GenerateAccessToken |
steps.oauth.v2.FailedToResolveAuthorizationCode |
500 | המדיניות שצפויה למצוא קוד הרשאה במשתנה שצוין
רכיב <Code> , אבל אי אפשר לפענח את המשתנה. |
GenerateAuthorizationCode |
steps.oauth.v2.FailedToResolveClientId |
500 | המדיניות שצפויה למצוא את ה-Client ID במשתנה שצוין
רכיב <ClientId> , אבל אי אפשר לפענח את המשתנה. |
GenerateAccessToken GenerateAuthorizationCode GenerateAccessTokenImplicitGrant RefreshAccessToken |
steps.oauth.v2.FailedToResolveRefreshToken |
500 | המדיניות צפויה למצוא אסימון רענון במשתנה שצוין
רכיב <RefreshToken> , אבל אי אפשר לפענח את המשתנה. |
RefreshAccessToken |
steps.oauth.v2.FailedToResolveToken |
500 | המדיניות שצפויה למצוא אסימון במשתנה שצוין
רכיב <Tokens> , אבל אי אפשר לפענח את המשתנה. |
ValidateToken |
steps.oauth.v2.InsufficientScope |
403 | לאסימון הגישה שמוצג בבקשה יש היקף שלא תואם להיקף שמצוין במדיניות לאימות אסימון גישה. מידע נוסף על היקף זמין במאמר עבודה עם היקפי הרשאות OAuth2. | VerifyAccessToken |
steps.oauth.v2.invalid_access_token |
401 | אסימון הגישה שנשלח מהלקוח אינו חוקי. | VerifyAccessToken |
steps.oauth.v2.invalid_client |
401 |
שם השגיאה הזה מוחזר כאשר המאפיין הערה: מומלץ לשנות את כלל השגיאה הקיים
כדי לקחת את |
GenerateAccessToken RefreshAccessToken |
steps.oauth.v2.invalid_request |
400 | שם השגיאה הזה משמש לכמה סוגים שונים של שגיאות, בדרך כלל לשגיאות חסרות
או פרמטרים שגויים שנשלחו בבקשה. אם <GenerateResponse> הוא
מוגדר ל-false , השתמש במשתני שגיאה (מתוארים בהמשך) כדי לאחזר פרטים על
השגיאה, למשל שם התקלה והסיבה לשגיאה. |
GenerateAccessToken GenerateAuthorizationCode GenerateAccessTokenImplicitGrant RefreshAccessToken |
steps.oauth.v2.InvalidAccessToken |
401 | כותרת ההרשאה לא כוללת את המילה "נושא", והיא נדרשת. עבור
דוגמה: Authorization: Bearer your_access_token |
VerifyAccessToken |
steps.oauth.v2.InvalidAPICallAsNo\ |
401 |
שרת ה-proxy של ה-API לא נמצא במוצר שמשויך לאסימון הגישה. טיפים: חשוב לוודא שהמוצר שמשויך לאסימון הגישה מוגדר כראוי. לדוגמה, אם אתם משתמשים בתווים כלליים לחיפוש בנתיבי משאבים, אתם צריכים לוודא השימוש בתווים כלליים לחיפוש נעשה בצורה נכונה. פרטים נוספים זמינים במאמר יצירת מוצרי API. ראו בנוסף הנחיות נוספות לגבי הסיבות לשגיאה הזו זמינים בפוסט בקהילת Apigee. |
VerifyAccessToken |
steps.oauth.v2.InvalidClientIdentifier |
500 |
שם השגיאה הזה מוחזר כאשר המאפיין |
GenerateAccessToken |
steps.oauth.v2.InvalidParameter |
500 | המדיניות חייבת לציין אסימון גישה או קוד הרשאה, אבל לא ובשניהם. | GenerateAuthorizationCode GenerateAccessTokenImplicitGrant |
steps.oauth.v2.InvalidTokenType |
500 | הרכיב <Tokens>/<Token> מחייב לציין את האסימון
הסוג (לדוגמה, refreshtoken ). אם הלקוח מעביר נתונים מהסוג הלא נכון, הפעולה הבאה
נשלחת לשגיאה. |
ValidateToken InvalidateToken |
steps.oauth.v2.MissingParameter |
500 | סוג התגובה הוא token , אבל לא צוינו סוגי הקצאות. |
GenerateAuthorizationCode GenerateAccessTokenImplicitGrant |
steps.oauth.v2.UnSupportedGrantType |
500 |
הלקוח ציין סוג הענקה שאינו נתמך על ידי המדיניות (לא מופיע ברשימה <SupportedGrantTypes> ). הערה: יש כרגע באג שבו יש שגיאות של סוג המענק שלא נתמך לא מושלכים בצורה נכונה. אם מתרחשת שגיאה מסוג הענקה שאינה נתמכת, שרת ה-proxy לא להזין את זרימת השגיאות כמצופה. |
GenerateAccessToken GenerateAuthorizationCode GenerateAccessTokenImplicitGrant RefreshAccessToken |
שגיאות פריסה
השגיאות האלו עשויות להתרחש כאשר פורסים שרת proxy שמכיל את המדיניות הזו.
שם השגיאה | סיבה |
---|---|
InvalidValueForExpiresIn |
לרכיב |
InvalidValueForRefreshTokenExpiresIn |
לרכיב <RefreshTokenExpiresIn> , הערכים החוקיים הם חיוביים
שלמים ו--1 . |
InvalidGrantType |
סוג מענק לא חוקי מצוין בקובץ <SupportedGrantTypes>
לרכיב מסוים. רשימת הסוגים התקינה מופיעה בחומר העזר בנושא מדיניות. |
ExpiresInNotApplicableForOperation |
חשוב לוודא שהפעולות שצוינו בקטע <Operations> תמיכה ברכיבים את תאריך התפוגה. לדוגמה, הפעולה VerifyToken לא עושה זאת. |
RefreshTokenExpiresInNotApplicableForOperation |
חשוב לוודא שהפעולות שצוינו בקטע <Operations> רענון לתמיכה ברכיב את תאריך התפוגה של האסימון. לדוגמה, הפעולה VerifyToken לא עושה זאת. |
GrantTypesNotApplicableForOperation |
ודא שסוגי ההענקות שצוינו ב-<SupportedGrantTypes>. נתמכים עבור בפעולה שצוינה. |
OperationRequired |
צריך לציין פעולה במדיניות הזו באמצעות הערה: אם הרכיב |
InvalidOperation |
צריך לציין פעולה חוקית במדיניות הזו באמצעות
רכיב הערה: אם הרכיב |
TokenValueRequired |
עליך לציין ערך של אסימון <Token> בשדה
רכיב <Tokens> . |
משתני כשל
המשתנים האלה מוגדרים כשהמדיניות הזו גורמת לשגיאה בזמן הריצה.
<GenerateResponse>
מוגדר
false
אם <GenerateResponse>
הוא
true
, המדיניות מחזירה תגובה ללקוח באופן מיידי במקרה שמתרחשת שגיאה –
המערכת מדלגת על זרימת השגיאה והמשתנים האלה לא מאוכלסים. מידע נוסף זמין במאמר הבא:
מה צריך לעשות
מידע על שגיאות שקשורות למדיניות.משתנים | איפה | דוגמה |
---|---|---|
fault.name="fault_name" |
fault_name הוא שם השגיאה, כפי שמצוין בטבלה שגיאות זמן ריצה שלמעלה. שם השגיאה הוא החלק האחרון בקוד השגיאה. | fault.name = "invalid_request" |
oauthV2.policy_name.failed |
policy_name הוא השם שצוין על ידי המשתמש של המדיניות שגרמה לבעיה. | oauthV2.GenerateAccesstoken.failed = true |
oauthV2.policy_name.fault.name |
policy_name הוא השם שצוין על ידי המשתמש של המדיניות שגרמה לבעיה. | oauthV2.GenerateAccesstoken.fault.name = invalid_request
הערה: בפעולה VerifyAccessToken, שם השגיאה כולל את הסיומת הזו: |
oauthV2.policy_name.fault.cause |
policy_name הוא השם שצוין על ידי המשתמש של המדיניות שגרמה לבעיה. | oauthV2.GenerateAccesstoken.cause = Required param : grant_type |
דוגמה לתגובת שגיאה
התגובות האלה נשלחות חזרה ללקוח אם <GenerateResponse>
הפרמטר הוא true.
errorcode
מתגובת השגיאה. אל תסתמכו על הטקסט
faultstring
, כי הוא עשוי להשתנות.אם הערך של <GenerateResponse>
הוא true, המדיניות מחזירה שגיאות
בפורמט הזה בשביל פעולות שיוצרות אסימונים וקודים. לרשימה מלאה, אפשר לעיין במאמר:
שגיאת HTTP של OAuth
הפניה לתגובה.
{"ErrorCode" : "invalid_client", "Error" :"ClientId is Invalid"}
אם הערך של <GenerateResponse>
הוא true, המדיניות מחזירה שגיאות
בפורמט הזה כדי לאמת ולאמת פעולות. לרשימה מלאה, ראו שגיאת HTTP של OAuth
הפניה לתגובה.
{ { "fault":{ "faultstring":"Invalid Access Token", "detail":{ "errorcode":"keymanagement.service.invalid_access_token" } } }
דוגמה לכלל שגוי
<FaultRule name=OAuthV2 Faults"> <Step> <Name>AM-InvalidClientResponse</Name> <Condition>(fault.name = "invalid_client") OR (fault.name = "InvalidClientIdentifier")</Condition> </Step> <Step> <Name>AM-InvalidTokenResponse</Name> <Condition>(fault.name = "invalid_access_token")</Condition> </Step> <Condition>(oauthV2.failed = true) </Condition> </FaultRule>
סכימת המדיניות
כל סוג מדיניות מוגדר על ידי סכימת XML (.xsd
). לידיעתך, המדיניות
סכימות זמינות ב-GitHub.
איך לעבוד עם פרוטוקול OAuth שמוגדר כברירת מחדל הגדרה
לכל ארגון (גם ארגון לתקופת ניסיון בחינם) ב-Apigee Edge מוקצה אסימון OAuth נקודת הקצה. נקודת הקצה (endpoint) מוגדרת מראש לפי כללי מדיניות בשרת ה-proxy ל-API שנקרא oauth. אפשר להתחיל להשתמש בנקודת הקצה של האסימון מיד אחרי שיוצרים אותו חשבון ב-Apigee Edge. עבור לפרטים, ראו הסבר על OAuth נקודות קצה (endpoints).
הטבת אסימוני גישה
כברירת מחדל, אסימוני OAuth2 נמחקים ממערכת Apigee Edge למשך 3 ימים (259,200 שניות) אחרי שיפוג התוקף של אסימון הגישה וגם של אסימון הרענון (אם הוא קיים). במקרים מסוימים, מומלץ לשנות את ברירת המחדל. לדוגמה, ייתכן שתרצו לקצר את זמן המחיקה באופן סופי לערך לחסוך במקום בכונן אם נוצרים מספר גדול של אסימונים.
אם משתמשים ב-Edge for Private Cloud, אפשר לשנות את ברירת המחדל באמצעות ההגדרה מאפייני הארגון, כפי שמוסבר בקטע הזה. (מחיקה לצמיתות של 3 ימים של אסימונים שפג תוקפם רלוונטי ל-Edge for Private Cloud בגרסה 4.19.01 ואילך. בגרסאות קודמות, הפונקציה מרווח המחיקה באופן סופי שמוגדר כברירת מחדל הוא 180 ימים.)
עדכון הגדרות המחיקה באופן סופי של Edge Private Cloud 4.16.01 ואילך
הערה: רק אסימונים שנוצרו אחרי שההגדרות האלה מוחלות, ההגדרות לא חלות על אסימונים שנוצרו קודם לכן.
- פתיחת הקובץ לעריכה:
/opt/apigee/customer/application/message-processor.properties
- צריך להוסיף את המאפיין הבא כדי להגדיר את מספר השניות להמתנה לפני מחיקה סופית של אסימון
לאחר התפוגה:
conf_keymanagement_oauth.access.token.purge.after.seconds=<number of seconds>
- מפעילים מחדש את מעבד ההודעות. מוצרים לדוגמה:
/opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
<ExpiresIn>
<RefreshTokenExpiresIn>
.
מתבצע עדכון של המחיקה באופן סופי הגדרות ל-Edge Private Cloud 4.15.07
הערה: רק אסימונים שנוצרו אחרי החלת ההגדרות האלה מושפעים, ההגדרות לא חלות על אסימונים שנוצרו קודם לכן.
-
הגדרת ערכים חיוביים עבור
<ExpiresIn>
ו- מאפייני<RefreshTokenExpiresIn>
במדיניות OAuthV2. הערכים הם ב: אלפיות שנייה. לדוגמה:<ExpiresIn>1000</ExpiresIn> <RefreshTokenExpiresIn>10000</RefreshTokenExpiresIn>
-
לפרוס מחדש את שרת ה-proxy.
-
אפשר להשתמש ב-API הזה כדי לעדכן את מאפייני מחיקת האסימון של הארגון באופן סופי:
POST https://<host-name>/v1/organizations/<org-name>
מטען ייעודי (payload):
<Organization name="AutomationOrganization"> <Description>Desc</Description> <Properties> <Property name="keymanagement.oauth20.access.token.purge">true</Property> <Property name="keymanagement.oauth20.access.token.purge.after.seconds">120</Property> </Properties> </Organization>
-
מפעילים מחדש את מעבד ההודעות. לדוגמה:
/opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
ה-API הזה מגדיר את נכס מחיקת האסימון כ-TRUE עבור הארגון שנקרא אוטומציה של ארגון. במקרה הזה, אסימון הגישה יימחק ממסד הנתונים 120 שניות אחרי שפג התוקף של האסימון ואסימון הרענון.
התנהגות שאינה תואמת ל-RFC
מדיניות OAuthV2 מחזירה תגובת אסימון מכיל מאפיינים מסוימים שלא תואמים ל-RFC. בטבלה הבאה אפשר לראות אילו אובייקטים לא עומדים בדרישות נכסים שהוחזרו על ידי מדיניות OAuthV2 והמאפיינים התואמים שלהם שתואמים למדיניות.
פרוטוקול OAuthV2 מחזיר: | המאפיין התואם ל-RFC הוא: |
---|---|
"token_type":"BearerToken" |
"token_type":"Bearer"
|
"expires_in":"3600" |
"expires_in":3600
(הערך התואם הוא מספר, ולא מחרוזת). |
בנוסף, תגובת השגיאה עבור אסימון רענון שפג תוקפו כאשר grant_type = refresh_token
הוא:
{"ErrorCode" : "invalid_request", "Error" :"Refresh Token expired"}
אבל תגובה שתואמת ל-RFC היא:
{"error" : "invalid_grant", "error_description" :"refresh token expired"}