מדיניות LDAP

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

מה

מדיניות ה-LDAP מספקת:

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

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

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

מידע נוסף זמין במאמרים הבאים:

דוגמאות

אימות באמצעות שם משתמש וסיסמה

<Ldap name="4GLdapPo>licy<"
   Ld>apRes<ourceldap1/Ld>apRe<source
   Auth>enticati<on
       UserName ref="request.he>ader.use<rname"/
       Password ref=">request.<heade>r.passw<ord&qu>ot;/
   <    Scopesubtree/Scope
   ><    Bas>e<DN ref="apigee.baseDN"/B>aseDN< !-- default is> d<c=api>gee,dc=com --
    /Authentication
 /Ldap

בדוגמה הזו מוצג אימות מול ספק LDAP. המדיניות מעבירה את שם המשתמש והסיסמה מהבקשה ל-LDAP לצורך אימות.

אימות מאפיין DN

<Ldap name="LdapPo>licy<"
   Ld>apRes<ourceldap1/Ld>apRe<source
   Auth>enticati<on
       Password ref="request.he>ader.pas<sword">/
       SearchQuerymail={<request.head>er.mail}</Sear>chQuery<
     >  Scopes<ubtree/Scope
       BaseDN>< ref=&q>u<ot;apigee.baseDN"/BaseDN !-- >defau<lt is dc=apigee>,d<c=com> --
    /Authentication
 /Ldap

המדיניות הזו מקבלת את ה-DN של המשתמש עם כתובת האימייל בכותרת הבקשה, ואז מאמתת את המשתמש מול LDAP באמצעות הסיסמה שסופקה בכותרת הבקשה.

חיפוש ב-LDAP

<Ldap name="LdapPo>licy&<quot;
    !-- using a custom LDAP p>rovid<er --
    LdapConn>ectorClasscom.custom.ldap.<MyProvider/LdapConn>ector<Class
    Ld>apReso<urceMyLdap/Ld>apRes<ource<>/span>
    Searc<h
        BaseDN ref="><;apigee>.<baseDN"/BaseDN !-- default is> dc=apige<e,dc=com -->
        SearchQuerymail={<request.head>er.mail}/<SearchQuer>y
        Att<ributes
 >       <    Attrib>uteaddress/At<tribute
 >     <      Attr>ibutephone/At<tribute
 >     <      Attr>ibutetitl<e/Attribute>
        </Attr><ibutes>
<        Scope/S‘cope !-’- d>efaul<t is su>b<tree >--
    /Search
/Ldap

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

כדי לחפש ב-LDAP ולאחזר מאפייני DN, הבקשה צריכה לכלול פרטי כניסה של אדמין.

הפניה לרכיב

בהמשך מופיעים תיאורים של רכיבי המדיניות ומאפייני המדיניות של LDAP.

רכיב

תיאור

Ldap

רכיב אב עם מאפיין שם שבו צריך להזין את שם המדיניות.

LdapConnectorClass

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

LdapResource

מזינים את שם הסביבה של משאב ה-LDAP. מידע נוסף זמין במאמר בנושא יצירת משאב LDAP.

BaseDN

רמת הבסיס של LDAP שמתחתיה נמצאים כל הנתונים שלכם. לדוגמה, בספק LDAP של Apigee, כל הנתונים נמצאים תחת dc=apigee,dc=com.

  • ref: משתמשים בו כדי לציין משתנה של זרימת נתונים שמכיל את הערך BaseDN, כמו apigee.baseDN. המשתנה ref קודם לערך BaseDN מפורש. אם מציינים גם ref וגם value, ‏ ref מקבל עדיפות. אם לא ניתן לפתור את ref בזמן הריצה, נעשה שימוש בערך.

Scope

  • object: האימות או החיפוש מתבצעים רק ברמת הבסיס של LDAP.
  • onelevel: האימות או החיפוש מתבצעים ברמה אחת מתחת לרמת הבסיס.
  • subtree (ברירת מחדל): האימות או החיפוש מתבצעים ברמת הבסיס ומתחת לבסיס באופן רקורסיבי מלא.

אימות

Authentication

רכיב האב של התנהגות האימות שאתם מטמיעים.

UserName

רכיב ריק שמקבל אחד מהמאפיינים הבאים:

  • ref: הפניה לשם המשתמש בבקשה, למשל: request.header.username
  • value: שם המשתמש עצמו

אם לא מתבצעת אימות באמצעות שם משתמש, או אם שם המשתמש לא נכלל בבקשה, אין צורך לכלול את הרכיב הזה.

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

Password

רכיב ריק שמקבל אחד מהמאפיינים הבאים:

  • ref: הפניה לסיסמה בבקשה, כמו request.header.password
  • value: הסיסמה המוצפנת עצמה

SearchQuery

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

לדוגמה, אם ב-LDAP מוגדר מאפיין mail לאחסון כתובת אימייל:

<SearchQuery>mail={request.header.mail}</SearchQuery>

חיפוש

Search

רכיב האב של התנהגות החיפוש שאתם מטמיעים.

SearchQuery

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

<SearchQuery>mail={request.header.mail}</SearchQuery>

השאילתה הזו מחפשת ב-LDAP כתובת אימייל שתואמת לכתובת האימייל שבבקשה, ועכשיו המדיניות יכולה לאחזר מאפייני DN נוספים של המשתמש הזה באמצעות רכיב Attributes.

Attributes

משתמשים באלמנט <Attribute> אחד או יותר כדי לזהות את המטא-נתונים של ה-DN שרוצים לאחזר עבור המשתמש. צריך לציין לפחות מאפיין אחד.

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

ערכי המאפיינים הם שמות המאפיינים של DN שמוגדרים ב-LDAP.

<Attributes>
  <Attribute>address</Attribute>
  <Attribute>phone</Attribute>
  <Attribute>title</Attribute>
</Attributes>

הערות שימוש

‫Apigee Edge for Private Cloud מאפשר לכם להשתמש בספק LDAP בקריאות ל-API. בעזרת מדיניות LDAP, אפליקציות יכולות לאמת פרטי כניסה מול משתמשים שמאוחסנים ב-LDAP, ואפשר לאחזר שמות ייחודיים (DN) מ-LDAP – המטא-נתונים או המאפיינים שמשויכים לכל משתמש, כמו כתובת אימייל, כתובת ומספר טלפון. ה-DN שמוחזר מאוחסן במשתנה לשימוש נוסף על ידי ה-API proxy.

יצירה של משאב LDAP

מדיניות ה-LDAP מתבססת על משאב LDAP שיוצרים ב-Apigee Edge. משאב LDAP מספק את פרטי החיבור למאגר LDAP.

כדי ליצור ולנהל משאבי LDAP, משתמשים בממשק ה-API ובמטען הייעודי (payload) הבאים:

API

ליצור (POST) משאב LDAP או להציג רשימה (GET) של כל משאבי ה-LDAP:

/v1/organizations/org_name/environments/environment/ldapresources

קבלת פרטים על (GET), עדכון (POST) ומחיקה (DELETE) של משאב LDAP:

/v1/organizations/org_name/environments/environment/ldapresources/ldap_resource_name

מטען ייעודי

בהמשך מופיע מטען ייעודי (payload) לדוגמה בפורמט XML עם הערות לגבי השימוש.

<LdapResource name="l>dap<1"
  >Conne<ction>
    Ho<sts
      !-- port is optional: defaults to 389 for ldap:// and 636 for l>daps://< --
      Host >port=&q<uot;6>36&qu<ot;foo>.com/<Host
    />Hosts<
    SSLEna>b<ledfalse/SSLEnabled !-- optional, >defau<lts to >f<alse --
> <   Version3/Version !-- optio>nal, <defaults to 3->-
    <Authentications>i<mple/Authentication !-- optional, only> simp<le supported --
  >  ConnectionPr<oviderjndi|unboundi>d</ConnectionProv>ider <!-- required >--
    ServerSetTypesingle|<round robin|fa>i<lover/ServerSetType !-- not ap>plica<ble for jndi --
    !-- If using a custom LDAP provider, the fully> qual<ified class: --
  >  LdapConnectorClasscom.cu<stom.ldap.MyProvide>r/L<dapConnecto>rCl<ass
  /Connection
  Connec>t<Pool enabled="true" !-- enabled is> opti<onal, d>efaul<ts to tr>u<e --
    Timeout30000/Timeout !-- optional, in milliseco>nds; <if not >se<t, no ti>m<eout --
    Maxsize50/Maxsize !-- optional; if >not s<et, no m>ax< connecti>o<ns --
    Prefsize30/Prefsize !-- optiona>l; if< not set><, no pref> <size --
    Initsize/Initsize !-- optional>; if <not set,>< defaults> <to 1 --
    Protocol/Protocol !-- optional; if not s>et,< defaults to> &#<39;ss>l pla<in>' --
  /ConnectPool
  A<dmi>n
   < DNcn=ma>nager,<dc=apigee>,dc<=com/D>N<
    Password>secret/Password
  /Admin
/LdapResource

דוגמה ל-curl: יצירת משאב LDAP

בדוגמה הבאה נוצר משאב LDAP בשם ldap1.

curl -X POST -H "Content-Type: application/xml" \
  https://api.enterprise.apigee.com/v1/organizations/myorg/environments/test/ldapresources \
  -u apigee_email:passwor<d -d \
  'LdapResourc>e nam<e="ld>ap1&quo<t;
  >  Conne<ctio>n
     < Host>s
     < Hostf>oo.com/<Host
     > /Hos<ts
      SS>LEnable<dfalse/>S<SLEnable>d
     < Version3/Vers>ion
  <    Authenticat>ionsimp<le/Authentication
>      Con<nectionProviderunbo>undid/C<onnectionProv>ider
      <ServerSetTyper>ound <robin/Serve>rSetT<ype
    /Connection
    Co>nnectPo<ol enab>led=&<quot;tru>e"<
      >Ti<meout300>00/Time<out
    >  <Maxsize50>/Maxsiz<e
      ><Prefsize3>0/Prefs<ize
    ><  Initsiz>e/Ini<tsize
      >Proto<col/P>rotocol<
 >   /ConnectPool
    Admin
 <   >  DNcn=<manager,>dc=api<gee,dc=co>m/DN
<      >Pas<swordsecret/P>assword
    /Admin
  /LdapResource'

קודי תגובה

אלה קודי התגובה של ה-HTML שהמדיניות מחזירה להצלחה או לכישלון:

  • Success: 200
  • Failure: 401

שימוש בספק LDAP מותאם אישית ב-Edge for Private Cloud

שימוש בספק LDAP מותאם אישית

‫Apigee Edge for Private Cloud מגיע עם ספק LDAP שכבר מוגדר לאינטראקציה עם מדיניות LDAP. עם זאת, אם אתם משתמשים בספק LDAP בהתאמה אישית, אתם צריכים להפעיל את הספק כדי לתמוך במדיניות LDAP. לשם כך:

  1. במחלקה של ספק ה-LDAP, מטמיעים את הממשק ExternalLdapConProvider.
    public interface ExternalLdapConProvider {
      void doAuthentication(LdapBean LlapBean, String userDN, String password, String baseDN);
    
      void doSearchAndAuthentication(LdapBean LlapBean, String password, String baseDN, String query, int scope);
    
      Collection<Map<String, String[]>> doSearch(LdapBean LlapBean, String query,
        String baseDN, Collection<String> requiredAttributes, int scope);
    
      void closeConnections();
    }
  2. ב<LdapConnectorClass> של הגדרת המדיניות (בקטעים הבאים), מוסיפים את שם המחלקה המלא של ספק ה-LDAP המותאם אישית.
  3. מורידים את הקובץ custom-ldap.jar_.zip. (יכול להיות שתצטרכו ללחוץ לחיצה ימנית ולבחור באפשרות שמירה בשם).
  4. מבטלים את הדחיסה.
  5. מוסיפים את הקובץ custom-ldap.jar לסביבה ומוודאים שהוא נמצא בנתיב המחלקה.
  6. יוצרים משאב סביבה עבור ספק ה-LDAP. תשתמשו בשם של משאב הסביבה ברכיב <LdapResource> של מדיניות ה-LDAP.

שימוש ב-UnboundID LDAP SDK for Java

אפשר להשתמש ב-UnboundID LDAP SDK עם מדיניות LDAP, אבל קודם צריך להוריד את גרסה 2.3.1 ולהוסיף אותה לכל נתיבי המחלקות של מעבד ההודעות.

כדי להשתמש ב-UnboundID LDAP SDK עם מדיניות LDAP:

  1. פותחים דפדפן ועוברים למאגר הקבצים של Sourceforge עבור UnboundID LDAP SDK:
    https://sourceforge.net/projects/ldap-sdk/files/
  2. מחפשים את גרסה 2.3.1 (SE או Standard Edition) של ה-SDK ומורידים את קובץ ה-ZIP של הגרסה הזו. לדוגמה, מורידים את הקובץ unboundid-ldapsdk-2.3.1-se.zip.
  3. מחלצים את קובץ ה-JAR מקובץ ה-ZIP של ה-SDK, כמו בדוגמה הבאה:
    unzip -j -d ~/tmp ~/Downloads/unboundid-ldapsdk-2.3.1-se.zip unboundid-ldapsdk-2.3.1-se/unboundid-ldapsdk-se.jar

    הפקודה הזו מחלצת רק את קובץ ה-JAR לספרייה ‎~/tmp. היא משמיטה את מבנה הספרייה עם -j, אבל זה אופציונלי.

  4. בכל צומת של מעבד בקשות:
    1. מעתיקים את קובץ ה-JAR לספרייה /opt/apigee/edge-gateway/lib/thirdparty של Message Processor.
    2. אם צריך, נותנים למשתמש Apigee הרשאה בקובץ ה-JAR כדי שמעבד ההודעות יוכל לגשת אליו.
    3. דפדפן Edge מוסיף את כל הספריות של צד שלישי בספרייה /opt/apigee/edge-gateway/lib/thirdparty לנתיב המחלקה.

    4. מפעילים מחדש את מעבד ההודעות:
      /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart

משתני תהליך

בהמשך מפורטים משתני מדיניות LDAP שאוכלסו על ידי SearchQuery.

משתנה

תיאור

ldap.policyName.execution.success

אחרי שהמדיניות מופעלת, משתנה הזרימה הזה מכיל את הערך true או false, בהתאם לתוצאה.

ldap.policyName.search.result[index].
  attribute.attrName[index]=value

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

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

ldap.policyName.search.result.attribute.address
ldap.policyName.search.result.attribute.phone
ldap.policyName.search.result.attribute.email

אם רוצים לאחזר את מאפיין הכתובת השלישי בתוצאות החיפוש, משתמשים בביטוי הבא:

ldap.policyName.search.result[3].attribute.address

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

ldap.policyName.search.result.attribute.mail[2]

קודי שגיאה

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

המדיניות הזו משתמשת בקודי השגיאה הבאים:

קוד שגיאה מסר
InvalidAttributeName Invalid attribute name {0}.
InvalidSearchBase Search base can not be empty.
InvalidValueForPassword Invalid value for password field. It can not be empty.
InvalidSearchScope Invalid scope {0}. Allowed scopes are {1}.
InvalidUserCredentials Invalid user credentials.
InvalidExternalLdapReference Invalid external ldap reference {0}.
LdapResourceNotFound Ldap resource {0} not found.
BaseDNRequired Base DN required.
OnlyReferenceOrValueIsAllowed Only value or reference is allowed for {0}.
AttributesRequired At least one attribute required for search action.
UserNameIsNull User name is null.
SearchQueryAndUserNameCannotBePresent Both search query and username can not be present in the authentication action. Please specify either one of them.