הפעלת גישה לאסימוני OAuth 2.0 לפי מזהה משתמש ומזהה אפליקציה

Edge for Private Cloud גרסה 4.17.05

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

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

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

כברירת מחדל, כש-Edge יוצר אסימון גישה מסוג OAuth 2.0, הפורמט של האסימון הזה הוא:

{
  "issued_at" : "1421847736581",
  "application_name" : "a68d01f8-b15c-4be3-b800-ceae8c456f5a",
  "scope" : "READ",
  "status" : "approved",
  "api_product_list" : "[PremiumWeatherAPI]",
  "expires_in" : "3599",
  "developer.email" : "tesla@weathersample.com",
  "organization_id" : "0",
  "token_type" : "BearerToken",
  "client_id" : "k3nJyFJIA3p62DWOkLO6OJNi87GYXFmP",
  "access_token" : "7S22UqXGJDTuUADGzJzjXzXSaGJL",
  "organization_name" : "myorg",
  "refresh_token_expires_in" : "0",
  "refresh_count" : "0"
}

שימו לב לנקודות הבאות:

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

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

מזהה משתמש הקצה הוא המחרוזת שבה משתמש Edge כמזהה המפתח, ולא כתובת האימייל של המפתח. אפשר לדעת את מזהה המפתח לפי כתובת האימייל של המפתח באמצעות הקריאה'Get Developer API'.

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

{
  "issued_at" : "1421847736581",
  "application_name" : "a68d01f8-b15c-4be3-b800-ceae8c456f5a",
  "scope" : "READ",
  "app_enduser" : "6ZG094fgnjNf02EK",
  "status" : "approved",
  "api_product_list" : "[PremiumWeatherAPI]",
  "expires_in" : "3599",
  "developer.email" : "tesla@weathersample.com",
  "organization_id" : "0",
  "token_type" : "BearerToken",
  "client_id" : "k3nJyFJIA3p62DWOkLO6OJNi87GYXFmP",
  "access_token" : "7S22UqXGJDTuUADGzJzjXzXSaGJL",
  "organization_name" : "myorg",
  "refresh_token_expires_in" : "0",
  "refresh_count" : "0"
}

ממשקי API לאחזור וביטול אסימוני גישה מסוג OAuth 2.0 לפי מזהה משתמש ומזהה אפליקציה

אפשר להשתמש בממשקי ה-API הבאים כדי לגשת לאסימוני OAuth לפי מזהה משתמש, מזהה אפליקציה או שניהם:

הליך להפעלת גישה לאסימונים

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

שלב 1: הפעלת התמיכה בגישה לאסימונים בארגון

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

המשתמש שמבצע את הקריאה הבאה חייב להיות בתפקיד orgadmin או opsadmin בארגון. מחליפים את הערכים שב{curly braces} בערכים הספציפיים לארגון:

> curl -H "Content-type:text/xml" -X POST \
  https://<ms-ip>:8080/v1/organizations/{org_name} \
  -d '<Organization name="{org_name}">
      <Properties>
        <Property name="features.isOAuthRevokeEnabled">true</Property>
        <Property name="features.isOAuth2TokenSearchEnabled">true</Property>
      </Properties>
    </Organization>' \ 
  -u {userEmail}:{mypassword}

שלב 2: הגדרת הרשאות לתפקיד opsadmin בארגון

צריך לתת רק לתפקידים orgadmin ו-opsadmin בארגון הרשאות לאחזור (HTTP GET) ולבטל (HTTP PUT) אסימוני OAuth 2.0 על סמך מזהה המשתמש או מזהה האפליקציה. כדי לשלוט בגישה, צריך להגדיר 'קבלת הרשאות' במשאב /oauth2 של הארגון. למשאב הזה יש כתובת URL בצורה הבאה:

https://<ms-ip>:8080/v1/organizations/{org_name}/oauth2

לתפקיד orgadmin כבר צריכות להיות ההרשאות הנדרשות. לתפקיד opsadmin במשאב /oauth2, ההרשאות אמורות להיראות כך:

<ResourcePermission path="/oauth2">
    <Permissions>
        <Permission>get</Permission>
        <Permission>put</Permission>
    </Permissions>
</ResourcePermission>

אפשר להשתמש בקריאה Get Permission for a Single Resource API כדי לראות לאילו תפקידים יש הרשאות למשאב /oauth2.

בהתאם לתשובה, תוכלו להשתמש בקריאות ל-Add Permissions for Resource to a Role ול- Delete Permission for Resource API כדי לבצע את השינויים הנחוצים בהרשאות המשאבים /oauth2.

משתמשים בפקודה הבאה ב-cURL כדי לתת לתפקיד opsadmin הרשאות לקבל ו-put למשאב /oauth2. מחליפים את הערכים שבמערך {curly braces} בערכים הספציפיים לארגון:

> curl -X POST -H 'Content-type:application/xml' \
  http://<ms-ip>:8080/v1/organizations/{org}/userroles/opsadmin/permissions \
  -d '<ResourcePermission path="/oauth2">
      <Permissions>
        <Permission>get</Permission>
        <Permission>put</Permission>
      </Permissions>
    </ResourcePermission>' \
  -u {USEREMAIL}:{PWD} 

השתמשו בפקודה הבאה מסוג cURL כדי לבטל את ההרשאות get ו-put למשאב /oauth2 מתפקידים אחרים מלבד orgadmin ו-opsadmin. מחליפים את הערכים שב{curly braces} בערכים הספציפיים לארגון:

> curl -X DELETE -H 'Content-type:application/xml' \
  http://<msip>:8080/v1/organizations/{org-name}/userroles/{roles}/permissions \
  -d '<ResourcePermission path="/oauth2">
      <Permissions></Permissions>
    </ResourcePermission>' \
   -u {USEREMAIL}:{PWD} 

שלב 3: מגדירים את הנכס oauth_max_search_limit

מוודאים שהנכס conf_keymanagement_oauth_max_search_limit בקובץ /opt/apigee/customer/application/management-server.properties מוגדר ל-100:

conf_keymanagement_oauth_max_search_limit = 100

אם הקובץ לא קיים, יש ליצור אותו.

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

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

> /opt/apigee/apigee-service/bin/apigee-service edge-management-server restart
> /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart

שלב 4: מגדירים את מדיניות OAuth 2.0 שיוצרת אסימונים כך שתכלול את המזהה של משתמש הקצה

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

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

מדיניות OAuth 2.0 שמופיעה בהמשך, שנקראת GenerateAccessTokenClient, יוצרת אסימון גישה מסוג OAuth 2.0. חשוב לשים לב להוספה של התג <AppEndUser> מודגש, שמציין את המשתנה שמכיל את מזהה משתמש הקצה:

<OAuthV2 async="false" continueOnError="false" enabled="true" name="GenerateAccessTokenClient">
    <DisplayName>OAuth 2.0.0 1</DisplayName>
    <ExternalAuthorization>false</ExternalAuthorization>
    <Operation>GenerateAccessToken</Operation>
    <SupportedGrantTypes>
         <GrantType>client_credentials</GrantType>
    </SupportedGrantTypes>
    <GenerateResponse enabled="true"/>
    <GrantType>request.queryparam.grant_type</GrantType> 
    <AppEndUser>request.header.appuserID</AppEndUser> 
    <ExpiresIn>960000</ExpiresIn>
</OAuthV2>

לאחר מכן תוכלו להשתמש בפקודה cURL הבאה כדי ליצור את אסימון הגישה מסוג OAuth 2.0, ולהעביר את ה-User-ID ככותרת appuserID:

> curl -H "appuserID:6ZG094fgnjNf02EK" \
https://myorg-test.apigee.net/oauth/client_credential/accesstoken?grant_type=client_credentials \
  -X POST \
  -d 'client_id=k3nJyFJIA3p62TKIkLO6OJNXFmP&client_secret=gk5K5lIp943AY4'

בדוגמה הזו, ה-appuserID מועבר ככותרת של בקשה. יש הרבה דרכים להעביר מידע במסגרת בקשה. לדוגמה, אפשר לבצע את הפעולות הבאות:

  • משתמשים במשתנה פרמטר של טופס: request.formparam.appuserID
  • שימוש במשתנה זרימה שמספק את מזהה משתמש הקצה