הטמעה של סוג ההרשאה password

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

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

מידע נוסף על הנושא הזה

בנושא הזה מופיע תיאור כללי וסקירה כללית של תהליך ההרשאות מסוג OAuth 2.0 resource owner password (סיסמת בעל המשאב), ומוסבר איך להטמיע את התהליך הזה ב-Apigee Edge.

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

  • בקשת אסימון גישה: סוג הענקת הגישה 'סיסמה': במאמר הזה מוסבר איך ליצור בקשת אסימון, איך להגדיר את מדיניות OAuthV2 לסוג הענקת הגישה 'סיסמה' ואיך להגדיר נקודת קצה למדיניות ב-Edge.
  • oauth-validate-key-secret: שרת proxy לדוגמה ב-GitHub שאפשר לפרוס ב-Edge ולנסות אותו. זוהי דוגמה מקצה לקצה שכוללת את סוג ההרשאה 'סיסמה'. היא מדגימה שיטה מומלצת, שלפיה צריך לאמת את פרטי הכניסה (מפתח/סוד) של אפליקציית הלקוח לפני ששולחים את פרטי הכניסה של המשתמש לספק זהויות.

וידאו

סרטון: כאן אפשר לצפות בסרטון על הטמעה של סוג ההרשאה password grant.

תרחישים לדוגמה

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

תרשים זרימה

בתרשים הבא מוצג תהליך ההרשאה מסוג סיסמה של בעל המשאב, עם Apigee Edge כשרת ההרשאות.

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

השלבים בתהליך של סוג ההרשאה password

הנה סיכום של השלבים הנדרשים להטמעה של סוג ההרשאה password (סיסמה) שבו Apigee Edge משמש כשרת ההרשאות.

דרישה מוקדמת: צריך לרשום את אפליקציית הלקוח ב-Apigee Edge כדי לקבל את מזהה הלקוח ואת מפתחות סוד הלקוח. פרטים נוספים זמינים במאמר בנושא רישום אפליקציות לקוח.

1. המשתמש מתחיל את התהליך ומזין את פרטי הכניסה

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

2. האפליקציה שולחת בקשה לטוקן גישה מ-Apigee Edge

האפליקציה שולחת בקשה לאסימון גישה, כולל פרטי הכניסה של המשתמש, לנקודת הקצה GenerateAccessToken ב-Apigee Edge.

זוהי בקשת POST לדוגמה, שכוללת את הפרמטרים הנדרשים לסוג ההרשאה הזה:

$ curl -i \
  -X POST \
  -H 'Content-Type: application/x-www-form-urlencoded' \
  -H 'Authorization: Basic c3FIOG9vSGV4VHo4QzAySVg5T1JvNnJoZ3ExaVNyQWw6WjRsanRKZG5lQk9qUE1BVQ' \
  -d 'grant_type=password&username=the-user-name&password=the-users-password' \
  https://docs-test.apigee.net/oauth/token

לחלופין, אפשר להשתמש בפקודה הבאה, עם האפשרות ‎-u ל-curl, כדי ליצור בשבילכם את כותרת האימות הבסיסי בקידוד Base64.

$ curl -i \
  -X POST \
  -H 'Content-Type: application/x-www-form-urlencoded' \
  -u sqH8ooHexTz8C02IX9ORo6rhgq1iSrAl:Z4ljtJdneBOjPMAU \
  -d 'grant_type=password&username=the-user-name&password=the-users-password' \
  https://docs-test.apigee.net/oauth/token

(כל אחת מהפקודות האלה צריכה להיות בשורה אחת).

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

3. ‫Edge מאמת את אפליקציית הלקוח

לפני ששולחים את שם המשתמש והסיסמה של המשתמש לספק זהויות, Edge צריך לדעת שאפליקציית הלקוח ששולחת את הבקשה היא אפליקציה תקפה ומהימנה. אחת הדרכים לעשות זאת היא להשתמש באימות מפתח API בקריאה ל-API. במקרים מסוימים, כדאי לאמת גם את מפתח הלקוח וגם את הסוד. ב מאגר api-platform-samples ב-GitHub יש דוגמה לשרת proxy שממחישה את הטכניקה החלופית הזו.

4. ‫Edge מעבד את פרטי הכניסה

אחרי שהאפליקציה של הלקוח מאומתת, אפשר להשתמש במדיניות Service Callout או JavaScript כדי לקרוא לשירות הזהות ולשלוח את פרטי הכניסה של המשתמש. לדוגמה, זה יכול להיות שירות LDAP או כל שירות אחר שרוצים להשתמש בו כדי לאמת את פרטי הכניסה. פרטים על המדיניות הזו זמינים במאמרים בנושא מדיניות Extract Variables ומדיניות JavaScript.

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

5. מדיניות OAuthV2 מופעלת

אם פרטי הכניסה תקפים, השלב הבא בעיבוד הוא הפעלת מדיניות OAuthV2 שהוגדרה לסוג ההרשאה password. כאן מוצגת דוגמה. הרכיבים <UserName> ו-<PassWord> הם חובה, ואפשר לאחזר אותם ממשתני הזרימה שנשמרו באמצעות מדיניות ExtractVariables. מידע מפורט על המדיניות הזו זמין במאמר בנושא מדיניות OAuthV2.

<OAuthV2 name="GetAccessToken">
  <Operation>GenerateAccessToken</Operation>
  <ExpiresIn>360000000</ExpiresIn> 
  <SupportedGrantTypes> 
     <GrantType>password</GrantType> 
  </SupportedGrantTypes> 
  <GrantType>request.queryparam.grant_type</GrantType> 
  <UserName>login</UserName>
  <PassWord>password</PassWord>
  <GenerateResponse/> 
</OAuthV2>

אם המדיניות הזו מצליחה, נוצרת תגובה שמוחזרת ללקוח ומכילה אסימון גישה. התגובה היא בפורמט JSON. נראה דוגמה. שימו לב ש-access_token הוא אחד מהרכיבים:

{
    "issued_at": "1420258685042",
    "scope": "READ",
    "application_name": "ce1e94a2-9c3e-42fa-a2c6-1ee01815476b",
    "refresh_token_issued_at": "1420258685042",
    "status": "approved",
    "refresh_token_status": "approved",
    "api_product_list": "[PremiumWeatherAPI]",
    "expires_in": "1799",
    "developer.email": "tesla@weathersample.com",
    "organization_id": "0",
    "token_type": "BearerToken",
    "refresh_token": "IFl7jlijYuexu6XVSSjLMJq8SVXGOAAq",
    "client_id": "5jUAdGv9pBouF0wOH5keAVI35GBtx3dT",
    "access_token": "I6daIgMSiUgYX1K2qgQWPi37ztS6",
    "organization_name": "docs",
    "refresh_token_expires_in": "0",
    "refresh_count": "0"
}

6. הלקוח שולח קריאה ל-API המוגן

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

$ curl -H "Authorization: Bearer I6daIgMSiUgYX1K2qgQWPi37ztS6
" http://{org_name}-test.apigee.net/weather/forecastrss?w=12797282