אבטחת API באמצעות דרישה למפתחות API

כרגע מוצג התיעוד של Apigee Edge.
כניסה למסמכי התיעוד של Apigee X.
מידע

מה תלמדו

במדריך הזה תלמדו:

  • יוצרים שרת proxy ל-API שדורש מפתח API.
  • הוספת מוצר של API.
  • הוסף מפתח ורשום אפליקציה.
  • מפעילים את ה-API באמצעות מפתח API.

חשוב להגן על ה-API מפני גישה לא מורשית. אחת הדרכים לעשות זאת היא באמצעות מפתחות API (שנקראים גם מפתחות ציבוריים, מפתחות של צרכנים או מפתחות של אפליקציות).

כשאפליקציה שולחת בקשה ל-API שלך, האפליקציה חייבת לספק מפתח תקין. בזמן הריצה, המדיניות 'אימות מפתח API' מוודאת שמפתח ה-API שסופק:

  • חוקי
  • הפריט לא בוטל
  • תואם למפתח ה-API של מוצר ה-API שחושף את המשאבים המבוקשים

אם המפתח תקין, הבקשה מותרת. אם המפתח לא תקין, הבקשה תוביל לכשל בהרשאה.

במדריך הזה נסביר איך יוצרים שרת proxy ל-API שדורש מפתח API תקין כדי לגשת אליו.

מה הדרישות כדי להצטרף לתוכנית?

  • חשבון Apigee Edge. אם עדיין אין לך חשבון, אפשר להירשם לפי ההוראות במאמר יצירת חשבון Apigee Edge.
  • דפדפן אינטרנט לביצוע קריאה ל-API.
  • (לקטע הקרדיט הנוסף, לא נדרש) cURL שמותקנת במחשב שלכם כדי לבצע קריאות ל-API משורת הפקודה.

יצירת שרת proxy ל-API

מידע על 'יעד מדומה'

שירות mocktarget מתארח ב-Apigee ומחזיר נתונים פשוטים. אין צורך במפתח API או באסימון גישה. למעשה, אפשר לגשת אליו בדפדפן אינטרנט. כדי לנסות זאת:

http://mocktarget.apigee.net

היעד יחזיר Hello, Guest!. במשאב /help אפשר למצוא דף עזרה עם משאבי API אחרים שזמינים.

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

    בחר ארגון בתפריט פרופיל המשתמש
  3. לוחצים על שרתי proxy של API בדף הנחיתה כדי להציג את הרשימה של שרתי ה-API.

    תפריט ממשקי API של Edge
  4. לוחצים על + שרת Proxy.
    לחצן ליצירת שרת proxy
  5. בדף יצירת שרת Proxy, בוחרים באפשרות הפוך שרת Proxy (הנפוץ ביותר).
  6. בדף פרטי שרת Proxy, מגדירים את שרת ה-Proxy באופן הבא:
    בשדה הזה עשה זאת
    שם שרת Proxy הזנת: helloworld_apikey
    נתיב הבסיס של הפרויקט

    שינוי ל: /helloapikey

    נתיב הבסיס של הפרויקט הוא חלק מכתובת ה-URL שמשמשת לשליחת בקשות לשרת ה-API של ה-API.

    הערה: ההמלצות של Apigee לניהול גרסאות API מפורטות במאמר ניהול גרסאות בספר האלקטרוני Web API Design: The missing Link.

    API קיים

    הזנת: http://mocktarget.apigee.net

    השדה הזה מגדיר את כתובת ה-URL של היעד ש-Apigee Edge מפעיל בתגובה לבקשה לשרת ה-API של ה-API.

    תיאור הזנת: hello world protected by API key
  7. לוחצים על הבא.
  8. בדף CommonPolicy, בקטע Security: Authorization, בוחרים באפשרות API Key ואז לוחצים על Next. הפעולה הזו תוסיף שני כללי מדיניות ל-API של שרת ה-proxy.
  9. בדף Virtual Hosts (מארחים וירטואליים), בוחרים באפשרות default ו-secure ולוחצים על Next. בחירה באפשרות ברירת המחדל מאפשרת לקרוא ל-API באמצעות http://. אם תבחרו באפשרות secure, תוכלו לקרוא ל-API שלכם באמצעות https://.
  10. בדף Summary (סיכום), מוודאים שסביבת הפריסה test מסומנת ולוחצים על Create and deploy.
  11. תופיע אישור על כך ששרת ה-API החדש של ה-API ומוצר ה-API נוצרו בהצלחה, ושרת ה-proxy של ה-API נפרס בסביבת הבדיקה.
  12. לוחצים על Edit proxy כדי להציג את הדף Overview של שרת ה-API של שרת ה-proxy.

הצגת המדיניות

  1. בעורך ה-API של שרת ה-proxy, לוחצים על הכרטיסייה פיתוח. תראו שנוספו שני כללי מדיניות לזרימת הבקשות של שרת ה-proxy של ה-API:
    • Verify API Key: בודק את הקריאה ל-API כדי לוודא שקיים מפתח API חוקי (נשלח כפרמטר של שאילתה).
    • Remove Query Param apikey: מדיניות assignMessage שמסירה את מפתח ה-API אחרי שהוא נבדק, כך שהוא לא יועבר וייחשף שלא לצורך.
  2. בתצוגת הקוד, לוחצים על סמל המדיניות אימות מפתח API, ובודקים את הגדרת ה-XML של המדיניות בתצוגת הקוד התחתונה. הרכיב <APIKey> מציין למדיניות איפה צריך לחפש את מפתח ה-API כשמבצעים את הקריאה. כברירת מחדל, המערכת מחפשת את המפתח כפרמטר של שאילתה שנקרא apikey בבקשת ה-HTTP:

    <APIKey ref="request.queryparam.apikey" />
    

    השם apikey הוא שרירותי, והוא יכול להיות כל מאפיין שמכיל את מפתח ה-API.

לנסות לקרוא ל-API

בשלב הזה, צריך לבצע קריאה מוצלחת ל-API ישירות לשירות היעד, ולאחר מכן לבצע קריאה לא מוצלחת לשרת ה-proxy של ה-API כדי לבדוק איך הוא מוגן על ידי כללי המדיניות.

  1. הצלחה

    בדפדפן אינטרנט, עוברים לכתובת הבאה. זהו שירות היעד שאליו מוגדר שרת ה-Proxy של ה-API להעביר את הבקשה אליו, אבל תועברו אליו ישירות בינתיים:

    http://mocktarget.apigee.net
    

    אמורה להופיע התשובה הבאה: Hello, Guest!

  2. כישלון

    עכשיו נסו לקרוא לשרת ה-API של ה-API:

    http://ORG_NAME-test.apigee.net/helloapikey
    

    החלפה של ORG_NAME בשם של הארגון ב-Edge.

    ללא המדיניות של אימות מפתח ה-API, הקריאה הזו תיתן לך את אותה תשובה כמו הקריאה הקודמת. עם זאת, במקרה כזה אמורה להתקבל הודעת השגיאה הבאה:

    {"fault":{"faultstring":"Failed to resolve API Key variable request.queryparam.apikey","detail":{"errorcode":"steps.oauth.v2.FailedToResolveAPIKey"}}}
    

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

בשלבים הבאים מוסיפים מוצר API.

הוספת מוצר של API

כדי להוסיף מוצר API באמצעות ממשק המשתמש של Apigee:

  1. בוחרים באפשרות פרסום > מוצרי API.
  2. לוחצים על +מוצר API.
  3. מזינים את פרטי המוצר של מוצר ה-API.

    שדה התיאור
    שם שם פנימי של מוצר ה-API. אין לציין תווים מיוחדים בשם.
    הערה: לא ניתן לערוך את השם לאחר יצירת מוצר ה-API. לדוגמה, helloworld_apikey-Product.
    השם המוצג השם המוצג של מוצר ה-API. השם המוצג מופיע בממשק המשתמש ואפשר לערוך אותו בכל שלב. אם לא מציינים שום אפשרות, המערכת תשתמש בערך השם. השדה הזה מתמלא באופן אוטומטי באמצעות ערך השם. ניתן לערוך או למחוק את התוכן שלו. השם המוצג יכול לכלול תווים מיוחדים. לדוגמה, helloworld_apikey-Product.
    התיאור תיאור המוצר של ה-API. לדוגמה, Test product for tutorial.
    סביבה סביבות שאליהן מוצר ה-API יאפשר גישה. לדוגמה, test או prod.
    גישה בוחרים באפשרות ציבורי.
    אישור אוטומטי של בקשות גישה הפעלת אישור אוטומטי של בקשות מפתח למוצר ה-API הזה מכל אפליקציה.
    מכסה התעלמות מהמדריך הזה.
    היקפי OAuth מותרים התעלמות מהמדריך הזה.
  4. בקטע של משאבי ה-API, בוחרים את שרת ה-proxy של ה-API שיצרתם. לדוגמה, helloworld_apikey.
  5. לוחצים על הוספה.
  6. בקטע נתיבים, מוסיפים את הנתיב '/'.
  7. לוחצים על הוספה.
  8. לוחצים על שמירה.

בשלבים הבאים תקבלו את מפתח ה-API הנדרש.

הוספה של מפתח ואפליקציה לארגון

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

יצירת מפתח

כדי ליצור מפתח:

  1. בתפריט, בוחרים באפשרות פרסום > מפתחים.
  2. לוחצים על + מפתח.
  3. מזינים את הטקסט הבא בחלון החדש למפתחים:

    בשדה הזה Enter
    שם פרטי Keyser
    שם משפחה Soze
    שם משתמש keyser
    אימייל keyser@example.com
  4. לוחצים על יצירה.

רישום אפליקציה

כדי לרשום אפליקציה של מפתח:

  1. בוחרים באפשרות פרסום > אפליקציות.
  2. לוחצים על + אפליקציה.
  3. מזינים את הפקודה הבאה בחלון New App (אפליקציה חדשה):

    p
    בשדה הזה עשה זאת
    שם ושם לתצוגה הזנת: keyser_app
    חברה / מפתח יש לבחור באפשרות: Developer
    מפתח יש לבחור באפשרות: Keyser Soze (keyser@example.com)
    כתובת URL לקריאה חוזרת (callback) והערות להשאיר ריק
  4. בקטע Credentials, בוחרים באפשרות Never בתפריט Expiry. התוקף של פרטי הכניסה לאפליקציה הזו לא יפוג אף פעם.
  5. בקטע מוצרים, לוחצים על הוספת מוצר.
  6. בוחרים באפשרות helloworld_apikey-Product.
  7. לוחצים על הוספה.
  8. כדי לשמור את העבודה, צריך ללחוץ על יצירה למעלה ומשמאל לקטע פרטי האפליקציה.

לקבלת מפתח ה-API

כך משיגים את מפתח ה-API:

  1. בדף Apps (פרסום > אפליקציות), לוחצים על keyser_app.
  2. בדף keyser_app, לוחצים על Show ליד Key בקטע Credentials. בקטע Product שימו לב שהמפתח משויך ל-helloworld_apikey

    .
  3. בוחרים את המקש Key ומעתיקים אותו. תשתמשו בו בשלב הבא.

קריאה ל-API עם מפתח

עכשיו יש לכם מפתח API ואתם יכולים להשתמש בו כדי להפעיל את שרת ה-API של שרת ה-proxy. יש להזין את הפרטים הבאים בדפדפן האינטרנט. מחליפים את שם הארגון ב-Edge של ORG_NAME, ואת מפתח ה-API של API_KEY למטה. מוודאים שאין רווחים מיותרים בפרמטר השאילתה.

http://ORG_NAME-test.apigee.net/helloapikey?apikey=API_KEY

מעכשיו, כשתבצעו קריאה לשרת ה-API של ה-API, אמורה להתקבל התגובה הבאה: Hello, Guest!

כל הכבוד! יצרת שרת proxy ל-API והגנת עליו על ידי דרישה להוספת מפתח API תקין לקריאה.

שימו לב שבאופן כללי, לא מומלץ להעביר מפתח API כפרמטר של שאילתה. כדאי לשקול להעביר אותה בכותרת ה-HTTP במקום זאת.

שיטה מומלצת: העברת המפתח בכותרת ה-HTTP

בשלב הזה צריך לשנות את שרת ה-proxy כדי לחפש את מפתח ה-API בכותרת שנקראת x-apikey.

  1. עורכים את שרת ה-proxy של ה-API. בוחרים באפשרות פיתוח > שרתי proxy של API > helloworld_apikey ועוברים לתצוגה פיתוח.
  2. בוחרים במדיניות Verify API Key ומשנים את ה-XML של המדיניות כך שהיא תצוין בתוך header ולא ב-queryparam:

    <APIKey ref="request.header.x-apikey"/>
    
  3. שומרים את שרת ה-proxy של ה-API כדי לפרוס את השינוי.
  4. מבצעים את הקריאה הבאה ל-API באמצעות cURL, כדי להעביר את מפתח ה-API ככותרת בשם x-apikey. לא לשכוח להחליף את שם הארגון.

    curl -v -H "x-apikey: API_KEY" http://ORG_NAME-test.apigee.net/helloapikey
    

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

<Remove>
<Headers>
    <Header name="x-apikey"/>
</Headers>
</Remove>

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

הנה כמה נושאים שקשורים ישירות למדריך הזה:

המשמעות היא שההגנה על ממשקי API באמצעות מפתחות API היא רק חלק מהסיפור. לעיתים קרובות, ההגנה באמצעות API כרוכה באמצעי אבטחה נוספים, כמו OAuth.

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