מוצג המסמך של Apigee Edge.
עוברים אל
מסמכי תיעוד של Apigee X. מידע
מה תלמדו
- מורידים ופורסים דוגמה של שרת Proxy ל-API.
- יצירת שרת proxy ל-API שמוגן באמצעות OAuth.
- יוצרים מוצר, מפתח ואפליקציה.
- החלפת פרטי הכניסה באסימון גישה מסוג OAuth.
- שולחים קריאה ל-API עם אסימון גישה.
במדריך הזה מוסבר איך לאבטח API באמצעות OAuth 2.0.
OAuth הוא פרוטוקול הרשאות שמאפשר לאפליקציות לגשת למידע מטעם משתמשים בלי לדרוש מהמשתמשים לחשוף את שם המשתמש והסיסמה שלהם.
כשמשתמשים ב-OAuth, מתבצעת החלפה של פרטי כניסה מאובטחים (כמו שם משתמש, סיסמה או מפתח/סוד) לאסימון גישה. לדוגמה:
joe:joes_password
(שם משתמש:סיסמה) או
Nf2moHOASMJeUmXVdDhlMbPaXm2U7eMc:unUOXYpPe74ZfLEb
(key:secret)
הופך ל:
b0uiYwjRZLEo4lEu7ky2GGxHkanN
אסימון הגישה הוא מחרוזת אקראית של תווים והוא זמני (התוקף שלו יפוג לאחר זמן קצר יחסית), לכן העברה שלו לצורך אימות משתמש בתהליך העבודה של האפליקציה הרבה יותר בטוח מהעברת פרטי כניסה אמיתיים.
פרוטוקול OAuth 2.0 מפרט מגדיר מנגנונים שונים, שנקראים "סוגי הענקות", לחלוקת גישה אסימונים לאפליקציות. סוג ההרשאה הבסיסי ביותר שמוגדר על ידי OAuth 2.0 נקרא 'לקוח' ". בסוג הענקה הזה, אסימוני גישה ל-OAuth נוצרים בתמורה להרשאת הלקוח פרטי כניסה, שהם צמדים של מפתח/סוד צרכן, כמו הדוגמה שלמעלה.
סוג ההרשאה של פרטי הכניסה של הלקוח ב-Edge מוטמע באמצעות כללי מדיניות בשרתי proxy ל-API. א' תהליך OAuth בדרך כלל כולל שני שלבים:
- קריאה לשרת proxy 1 ל-API כדי ליצור אסימון גישה ל-OAuth מהלקוח פרטי הכניסה. מדיניות OAuth v2.0 בשרת ה-proxy ל-API מטפלת בבעיה הזו.
- התקשרות לשרת proxy 2 של API כדי לשלוח את אסימון הגישה ל-OAuth בקריאה ל-API. שרת proxy ל-API מאמת את אסימון הגישה באמצעות מדיניות OAuth גרסה 2.0.
למה תזדקק?
- חשבון Apigee Edge. אם עדיין אין לכם חשבון, אפשר להירשם בעזרת ההוראות ביצירת Apigee חשבון Edge.
- cURL שמותקן במחשב שלך כדי לבצע קריאות ל-API משורת הפקודה.
הורדה ופריסה של ממשק API ליצירת אסימונים שרת proxy
בשלב הזה יוצרים את ה-Proxy ל-API שיוצר אסימון גישה ל-OAuth מפתח צרכן וסוד צרכן שנשלחו בקריאה ל-API. Apigee מספקת שרת proxy ל-API לדוגמה עשינו את זה. צריך להוריד את שרת ה-Proxy ולפרוס אותו עכשיו, ולהשתמש בו מאוחר יותר במדריך. (את/ה תוכלו לבנות את שרת ה-proxy הזה ל-API בקלות בעצמכם. לנוחיותכם, שלב ההורדה והפריסה הזה וכדי להראות לך כמה קל לשתף שרתי proxy שכבר נוצרו).
- הורדת OAuth קובץ ZIP לדוגמה של שרת ה-proxy ל-API לכל ספרייה בקובץ המערכת.
- עוברים לכתובת https://apigee.com/edge ונכנסים לחשבון.
- בוחרים באפשרות פיתוח > שרתי proxy ל-API בסרגל הניווט הימני.
- לוחצים על + Proxy.
- באשף יצירת שרת proxy, לוחצים על העלאת חבילת שרת proxy.
- בוחרים את הקובץ
oauth.zip
שהורדתם ולוחצים על הבא. - לוחצים על יצירה.
- אחרי שה-build מסתיים, לוחצים על עריכת שרת ה-proxy כדי להציג את שרת ה-Proxy החדש. בעורך ה-proxy ל-API.
- בדף 'סקירה כללית של עורך שרת proxy ל-API', לוחצים על התפריט הנפתח פריסה
ובוחרים באפשרות בדיקה. זוהי סביבת הבדיקה בארגון שלך.
בהודעת האישור, לוחצים על Deploy (פריסה).
כשתלחצו שוב על התפריט הנפתח 'פריסה', יופיע סמל ירוק כדי לציין ששרת ה-proxy נפרס בסביבת הבדיקה.
כל הכבוד! הורדתם ופרסתם בהצלחה ממשק API ליצירת אסימוני גישה שרת proxy לארגון שלכם ב-Edge.
הצגת התהליך והמדיניות של OAuth
בואו נבחן מקרוב את התוכן של שרת ה-proxy ל-API.
- בעורך ה-Proxy ל-API, לוחצים על הכרטיסייה פיתוח. בצד שמאל
בחלונית Navigator יופיעו שני כללי מדיניות. יופיעו גם שתי דלתות
POST
עובר בקטעProxy Endpoints
. -
לוחצים על AccessTokenClientCredential בקטע
Proxy Endpoints
.
בתצוגת קוד ה-XML, יופיע
Flow
שנקראAccessTokenClientCredential
:<Flow name="AccessTokenClientCredential"> <Description/> <Request> <Step> <Name>GenerateAccessTokenClient</Name> </Step> </Request> <Response/> <Condition>(proxy.pathsuffix MatchesPath "/accesstoken") and (request.verb = "POST")</Condition> </Flow>
תהליך הוא שלב בעיבוד בשרת proxy ל-API. במקרה הזה, הזרימה מופעלת כאשר תנאי מסוים מתקיים (שנקרא זרימה מותנית). התנאי, מוגדר ב הרכיב
<Condition>
, מציין שאם הקריאה ל-Proxy ל-API מתבצעת המשאב/accesstoken
, ופועל הבקשה הואPOST
, אז מפעילים את המדיניותGenerateAccessTokenClient
, שיוצרת את הגישה ב-Assistant. -
עכשיו נבחן את המדיניות שהתהליך המותנה יפעיל. לוחצים על GenerateAccessTokenClient סמל המדיניות בתרשים הזרימה.
תצורת ה-XML הבאה נטענת לתצוגת הקוד:<OAuthV2 name="GenerateAccessTokenClient"> <!-- 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> <!-- This part is very important: most real OAuth 2.0 apps will want to use other grant types. In this case it is important to NOT include the "client_credentials" type because it allows a client to get access to a token with no user authentication --> <GrantType>client_credentials</GrantType> </SupportedGrantTypes> <GrantType>request.queryparam.grant_type</GrantType> <GenerateResponse/> </OAuthV2>
ההגדרות האישיות כוללות:
- הערך
<Operation>
, שיכול להיות אחד מכמה ערכים מוגדרים מראש, מגדיר מה המדיניות אמורה לעשות. במקרה הזה, האפליקציה תיצור גישה ב-Assistant. - תוקף האסימון יפוג שעה אחת (3600,000 אלפיות שנייה) לאחר יצירת האסימון.
- ב-
<SupportedGrantTypes>
, פרוטוקול OAuth<GrantType>
הצפוי לשימוש הואclient_credentials
(החלפת מפתח צרכן וסוד באסימון OAuth). - רכיב ה-
<GrantType>
השני מציין למדיניות איפה לחפש הקריאה ל-API עבור הפרמטר של סוג ההענקה, כפי שנדרש במפרט OAuth 2.0. (אפשר לראות זאת בקריאה ל-API מאוחר יותר). אפשר לשלוח את סוג המענק גם ב-HTTP כותרת (request.header.grant_type
) או כפרמטר של טופס (request.formparam.grant_type
).
- הערך
בשלב הזה לא צריך לעשות שום דבר נוסף באמצעות ה-Proxy ל-API. בשלבים הבאים, ייעשה שימוש בשרת ה-proxy הזה ל-API כדי ליצור אסימון גישה ל-OAuth. אבל קודם כל, צריך לבצע כמה עוד דברים:
- יוצרים את שרת ה-proxy ל-API שרוצים לאבטח באמצעות OAuth.
- יוצרים עוד כמה פריטי מידע שנוצרו בתהליך פיתוח (Artifact) שיובילו למפתח הצרכן ולסוד הצרכן תצטרכו להחליף באסימון גישה.
יצירת שרת proxy ל-API שמוגן באמצעות OAuth
עכשיו צריך ליצור את שרת ה-proxy של ה-API שעליו רוצים להגן. זוהי הקריאה ל-API מחזירה את מה שרוצים. במקרה כזה, שרת ה-proxy ל-API יקרא לשירות mocktarget של Apigee כדי להחזיר את כתובת ה-IP שלך. אבל זה יוצג רק אם תעבירו גישת OAuth חוקית באסימון עם הקריאה ל-API.
שרת ה-proxy ל-API שייווצר כאן יכלול מדיניות שבודקת אסימון OAuth בקשה.
- בוחרים באפשרות פיתוח > שרתי proxy ל-API בסרגל הניווט הימני.
- לוחצים על + Proxy.
- באשף בניית שרת Proxy, בוחרים באפשרות שרת Proxy הפוך (הכי נפוץ). ולוחצים על Next.
- מגדירים את שרת ה-proxy באמצעות הפרטים הבאים:
בשדה הזה לעשות את זה שם שרת ה-proxy כניסה: helloworld_oauth2
נתיב בסיס הפרויקט שינוי ל:
/hellooauth2
נתיב הבסיס של Project הוא חלק מכתובת ה-URL שמשמשת לשליחת בקשות ל-API שרת proxy.
API קיים כניסה:
https://mocktarget.apigee.net/ip
ההגדרה הזו מגדירה את כתובת ה-URL של היעד ש-Apigee Edge מפעיל בבקשה ל-API שרת proxy.
תיאור כניסה: hello world protected by OAuth
- לוחצים על הבא.
- בדף Common policies (מדיניות משותפת):
בשדה הזה לעשות את זה אבטחה: Authorization בוחרים: OAuth 2.0 - לוחצים על הבא.
- בדף מארחים וירטואליים, לוחצים על הבא.
- בדף Build, מוודאים שסביבת ה-test מסומנת. לוחצים על Create and Deploy (יצירה ופריסה).
- בדף Summary (סיכום), מוצג אישור על כך ששרת ה-Proxy החדש ל-API שלכם. נוצר בהצלחה, ושרת ה-Proxy של ה-API נפרס בבדיקה הסביבה.
- לוחצים על עריכת שרת proxy כדי להציג את הדף סקירה כללית עבור שרת ה-proxy ל-API.
שימו לב שהפעם ה-Proxy של ה-API נפרס באופן אוטומטי. לוחצים על Deployment (פריסה) כדי לוודא שיש נקודה ירוקה לפריסה לצד המילה 'בדיקה' הסביבה.
הצגת המדיניות
בואו נבחן מקרוב את מה שיצרתם.
- בעורך ה-Proxy ל-API, לוחצים על הכרטיסייה פיתוח. אפשר לראות ש-2
כללי מדיניות נוספו לזרימת הבקשה של שרת ה-proxy ל-API:
- אימות אסימון גישה מסוג OAuth v2.0 – בודק את הקריאה ל-API לבצע מוודאים שיש אסימון OAuth חוקי.
- Remove Header Authorization (הסרה של הרשאת כותרת) – מדיניות AssignMessage מסירה את אסימון הגישה לאחר שהוא מסומן כדי שלא יועבר אל לשירות היעד. (אם שירות היעד היה זקוק לאסימון הגישה ל-OAuth, לא תשתמשו המדיניות הזו).
-
לוחצים על הסמל אימות אסימון גישה מסוג OAuth v2.0 בתצוגת הזרימה לעיין ב-XML שמתחתיו בחלונית הקוד.
<OAuthV2 async="false" continueOnError="false" enabled="true" name="verify-oauth-v2-access-token"> <DisplayName>Verify OAuth v2.0 Access Token</DisplayName> <Operation>VerifyAccessToken</Operation> </OAuthV2>
חשוב לשים לב שהערך של
<Operation>
הואVerifyAccessToken
. הפעולה מגדירה מה המדיניות אמורה לעשות. במקרה הזה, צריך לבדוק עבור אסימון OAuth חוקי בבקשה.
הוספת מוצר של API
כדי להוסיף מוצר API באמצעות ממשק המשתמש של Apigee:
- בוחרים באפשרות פרסום > מוצרי API.
- לוחצים על +מוצר API.
- מזינים את פרטי המוצר של מוצר ה-API.
שדה תיאור שם שם פנימי של מוצר ה-API. אל תציינו תווים מיוחדים בשם.
הערה: לא ניתן לערוך את השם אחרי שיוצרים את מוצר ה-API. לדוגמה,helloworld_oauth2-Product
.השם המוצג השם המוצג של מוצר ה-API. השם המוצג מופיע בממשק המשתמש ואפשר לערוך אותו אותו בכל שלב. אם לא מציינים זאת, המערכת תשתמש בערך השם. השדה הזה מאוכלס באופן אוטומטי שימוש בערך Name; אפשר לערוך או למחוק את התוכן שלו. השם המוצג יכול לכלול את השם הבא: בתווים מיוחדים. לדוגמה, helloworld_oauth2-Product
.תיאור תיאור של מוצר ה-API. סביבה סביבות שאליהן מוצר ה-API יאפשר גישה. בחירת הסביבה שאליה רוצים להגיע שפרסתם את ה-Proxy ל-API. לדוגמה, test
.גישה בוחרים באפשרות גלוי לכולם. אישור אוטומטי של בקשות גישה הפעלת אישור אוטומטי של בקשות מפתח למוצר ה-API הזה מכל אפליקציה. מכסה התעלמות מהצגת המדריך הזה. היקפי הרשאות OAuth מותרים התעלמות מהצגת המדריך הזה. - בשדה API proxy, בוחרים את ה-proxy ל-API שיצרתם.
- בשדה נתיב מזינים '/'. מתעלמים מהשדות האחרים.
- לוחצים על שמירה.
הוספת מפתח ואפליקציה אל ארגון
בשלב הבא צריך לדמות את תהליך העבודה של מפתח שנרשם לשימוש בממשקי ה-API. באופן אידיאלי, מפתחים צריכים לרשום את עצמם ואת האפליקציות שלהם דרך פורטל המפתחים שלכם. כאן אבל יש להוסיף מפתח ואפליקציה בתור מנהל מערכת.
למפתח יהיה אפליקציה אחת או יותר שקוראות לממשקי ה-API שלך, וכל אפליקציה מקבלת מפתח צרכן וסוד צרכן. המפתח/הסוד הזה לכל אפליקציה מספק גם לכם, ספק ה-API, בקרה מפורטת יותר על הגישה לממשקי ה-API ודיווח מפורט יותר על ניתוח נתונים ב-API בגלל ש-Edge יודע איזה מפתח ואפליקציה שייכים לכל אסימון של OAuth.
יצירת מפתח
בואו ניצור מפתח בשם נייג'ל טופנל.
- בוחרים באפשרות פרסום > מפתחים בתפריט.
- לוחצים על + Developer.
- מזינים את הפקודה הבאה בחלון New Developer (מפתח חדש):
בשדה הזה Enter שם פרטי Nigel
שם משפחה Tufnel
שם משתמש nigel
אימייל nigel@example.com
- לוחצים על יצירה.
רישום אפליקציה
רוצה ליצור אפליקציה בשביל ניג'ל?
- בוחרים באפשרות פרסום > אפליקציות.
- לוחצים על + אפליקציה.
- בחלון אפליקציה חדשה, מזינים את הפקודה הבאה:
בשדה הזה לעשות את זה שם ושם תצוגה כניסה: nigel_app
למפתחים לוחצים על מפתח ובוחרים באפשרות: Nigel Tufnel (nigel@example.com)
כתובת URL לקריאה חוזרת (callback) והערות להשאיר ריק - בקטע מוצרים, לוחצים על הוספת מוצר.
- בוחרים באפשרות helloworld_oauth2-Product.
- לוחצים על יצירה.
לקבלת מפתח צרכן וסוד צרכן
עכשיו תקבלו את מפתח הצרכן ואת סוד הצרכן שיוחלפו ב-OAuth אסימון גישה.
- מוודאים שהדף nigel_app מוצג. אם לא, בדף 'אפליקציות' (פרסום > אפליקציות), לוחצים על nigel_app.
-
בדף nigel_app, לוחצים על Show (הצגה) בקטע Key ו-Secret. שימו לב שהמפתח/הסוד המשויך אל "helloworld_oauth2-Product" שנוצר באופן אוטומטי מוקדם יותר.
- בוחרים את המפתח והסוד ומעתיקים אותם. להדביק אותן בדף זמני קובץ טקסט. תשתמשו בהם בשלב מאוחר יותר, שבו קוראים לשרת ה-proxy ל-API להחליף את פרטי הכניסה האלה באסימון גישה ל-OAuth.
אפשר לנסות לשלוח קריאה ל-API כדי לקבל את כתובת ה-IP (כישלון!)
לידיעתך, אפשר לנסות לשלוח קריאה לשרת ה-API המוגן שאמור להחזיר את כתובת ה-IP
address. מריצים את פקודת cURL הבאה בחלון טרמינל, ומחליפים את הפקודה ב-Edge
שם הארגון. המילה test
בכתובת ה-URL היא
את סביבת הבדיקה של הארגון, זו שאליה פרסתם את שרתי ה-proxy. נתיב הבסיס של שרת ה-proxy
הוא /hellooauth2
, אותו הנתיב הבסיסי שציינתם כשיצרתם את שרת ה-proxy.
שימו לב שאתם
לא תעביר אסימון גישה מסוג OAuth בשיחה.
curl https://ORG_NAME-test.apigee.net/hellooauth2
כי לשרת ה-proxy ל-API יש מדיניות אימות אסימון גישה מסוג OAuth v2.0 בדקתי אם יש אסימון OAuth תקין בבקשה, הקריאה תיכשל מהשלב הבא message:
{"fault":{"faultstring":"Invalid access token","detail":{"errorcode":"oauth.v2.InvalidAccessToken"}}}
במקרה כזה, מדובר בכשל הוא טוב! המשמעות היא ששרת ה-Proxy ל-API מאובטח הרבה יותר. מהימנים בלבד אפליקציות עם אסימון גישה תקין ל-OAuth יכולות לקרוא ל-API הזה בהצלחה.
קבלת אסימון גישה ל-OAuth
עכשיו אנחנו מגיעים לתשלום הגדול. בחרת להשתמש במפתח ובסוד שהועתק והודבק בקובץ טקסט, ולהחליף אותם באסימון גישה של OAuth. עכשיו את/ה לשלוח קריאה ל-API לשרת ה-proxy לדוגמה שייבאתם, oauth, יפיק אסימון גישה ל-API.
באמצעות המפתח והסוד האלה, מבצעים את קריאת ה-cURL הבאה (שימו לב שהפרוטוקול הוא
https
), להחליף את שם הארגון ב-Edge, את המפתח שלך
סוד כאשר מצוין:
curl -X POST -H "Content-Type: application/x-www-form-urlencoded" \ "https://ORG_NAME-test.apigee.net/oauth/client_credential/accesstoken?grant_type=client_credentials" \ -d "client_id=CLIENT_KEY&client_secret=CLIENT_SECRET"
שימו לב, אם אתם משתמשים בלקוח כמו Postman כדי להתקשר,
client_id
ו-client_secret
נמצאים בגוף של
חייב להיות x-www-form-urlencoded
.
אתם אמורים לקבל תגובה כזו:
{ "issued_at" : "1466025769306", "application_name" : "716bbe61-f14a-4d85-9b56-a62ff8e0d347", "scope" : "", "status" : "approved", "api_product_list" : "[helloworld_oauth2-Product]", "expires_in" : "3599", //--in seconds "developer.email" : "nigel@example.com", "token_type" : "BearerToken", "client_id" : "xNnREu1DNGfiwzQZ5HUN8IAUwZSW1GZW", "access_token" : "GTPY9VUHCqKVMRB0cHxnmAp0RXc0", "organization_name" : "myOrg", "refresh_token_expires_in" : "0", //--in seconds "refresh_count" : "0" }
קיבלת את אסימון הגישה שלך ל-OAuth! מעתיקים את הערך access_token (ללא המירכאות הכפולות) ו להדביק אותו בקובץ הטקסט. עוד רגע תשתמשו בה.
מה קרה עכשיו?
זכרו קודם שכשבחנתם את התהליך המותנה,
שרת proxy ל-oauth, שמופיע אם ה-URI של המשאב
/accesstoken
ופועל הבקשה הוא POST
, כדי לבצע את
GenerateAccessTokenClient
מדיניות OAuth שיוצרת אסימון גישה? כתובת ה-URL שלך
הפקודה עמדה בתנאים האלו, ולכן מדיניות OAuth בוצעה. הוא אימת את מפתח הצרכן שלך
והסודות של הצרכן, והחלפנו אותם באסימון OAuth שהתוקף שלו פג תוך שעה.
קוראים ל-API עם אסימון גישה (הצלחה!)
עכשיו, אחרי שיש לכם אסימון גישה, אתם יכולים להשתמש בו כדי לשלוח קריאה לשרת ה-proxy ל-API. לכתוב בעקבות שיחת cURL. מחליפים את שם הארגון ב-Edge ואת אסימון הגישה.
curl https://ORG_NAME-test.apigee.net/hellooauth2 -H "Authorization: Bearer TOKEN"
עכשיו אתם אמורים לקבל קריאה תקינה לשרת ה-proxy ל-API שיחזיר את כתובת ה-IP שלכם. עבור דוגמה:
{"ip":"::ffff:192.168.14.136"}
תוכלו לחזור על הקריאה ל-API למשך כשעה. לאחר מכן אסימון הגישה שפג תוקפן. כדי לבצע את השיחה לאחר שעה, יהיה עליך ליצור אסימון גישה חדש באמצעות את השלבים הקודמים.
מעולה! יצרת שרת proxy ל-API והגנת עליו על ידי דרישה להזין אסימון הגישה ל-OAuth יהיה כלול בשיחה.
נושאים קשורים
- דף הבית של OAuth
- מדיניות OAuthV2
- הורדת שרתי proxy ל-API (באנימציה מוצג איך לחבר שרת proxy ל-API לקובץ ZIP, כמו זה שהורדתם)