سياسة LDAP

أنت الآن بصدد الاطّلاع على مستندات Apigee Edge.
انتقِل إلىمستندات Apigee X.
info

الأدوات المستخدمة

تقدّم "سياسة LDAP" ما يلي:

  • المصادقة: يتم التحقّق من بيانات اعتماد المستخدمين المقدَّمة في الطلب من خلال مقارنتها ببيانات الاعتماد في موفِّر LDAP. تمنحك "سياسة LDAP" مرونة كبيرة في ما يتعلق بـ المصادقة، ما يتيح لك استخدام أي قيمة DN مع كلمة المرور، حتى إذا لم تكن قيمة DN التي تريدها مضمّنة في الطلب. على سبيل المثال، لنفترض أنّك بحاجة إلى استخدام عنوان البريد الإلكتروني وكلمة المرور للمصادقة. في هذه الحالة، تتوفّر الخيارات التالية:
    • إذا كان عنوان البريد الإلكتروني مضمّنًا في الطلب، يمكنك ببساطة استخدامه مع كلمة المرور للمصادقة على LDAP المصادقة.
    • إذا لم يكن عنوان البريد الإلكتروني مضمّنًا في الطلب، ولكن كانت سمة DN أخرى مضمّنة (مثل رقم الهاتف)، يمكنك استخدام رقم الهاتف للحصول على عنوان البريد الإلكتروني المقابل من LDAP، ثم استخدام عنوان البريد الإلكتروني وكلمة المرور للمصادقة.
  • البحث عن الاسم المميّز (DN): بالإضافة إلى المصادقة، يمكنك أيضًا استخدام "سياسة LDAP" لتحديد سمة مستخدم في الطلب، مثل عنوان البريد الإلكتروني، و إجراء طلب بحث يستردّ سمات DN الأخرى من LDAP لهذا المستخدم. يتم تخزين DN المستردّ في متغيّر.

استخدِم "سياسة LDAP" عندما يجب حصر الوصول إلى الموارد المحمية بالمستخدمين في موفِّر LDAP ، مثل مستخدمي المشرفين ومستخدمي المؤسسة والمطوّرين، خاصةً عندما يكون الوصول إلى رمز OAuth غير ضروري أو ثقيلاً جدًا. تم تصميم السياسة أيضًا لـ استرداد البيانات الوصفية لاسم النطاق لاستخدامها في مسارات خادم وكيل واجهة برمجة التطبيقات.

على سبيل المثال، يمكنك تنفيذ طلب بيانات من واجهة برمجة التطبيقات فقط عندما تتم مصادقة المستخدم بنجاح على LDAP، ثم استرداد سمات DN (اسم النطاق) للمستخدم اختياريًا بعد نجاح المصادقة.

لمزيد من المعلومات، يُرجى الاطّلاع على ما يلي:

نماذج

المصادقة باستخدام اسم المستخدم وكلمة المرور

<Ldap name="4GLdapPolicy">
   <LdapResource>ldap1</LdapResource>
   <Authentication>
       <UserName ref="request.header.username"/>
       <Password ref="request.header.password"/>
       <Scope>subtree</Scope>
       <BaseDN ref="apigee.baseDN"></BaseDN> <!-- default is dc=apigee,dc=com -->
    </Authentication>
 </Ldap>

يقدّم هذا النموذج عملية مصادقة على موفِّر LDAP. تُمرِّر السياسة اسم المستخدم وكلمة المرور من الطلب إلى LDAP للمصادقة.

المصادقة باستخدام سمة DN

<Ldap name="LdapPolicy">
   <LdapResource>ldap1</LdapResource>
   <Authentication>
       <Password ref="request.header.password"/>
       <SearchQuery>mail={request.header.mail}</SearchQuery>
       <Scope>subtree</Scope>
       <BaseDN ref="apigee.baseDN"></BaseDN> <!-- default is dc=apigee,dc=com -->
    </Authentication>
 </Ldap>

تحصل هذه السياسة على DN للمستخدم باستخدام عنوان البريد الإلكتروني في عنوان الطلب، ثم تصادق على المستخدم على LDAP باستخدام كلمة المرور المقدَّمة في عنوان الطلب.

البحث في LDAP

<Ldap name="LdapPolicy">
    <!-- using a custom LDAP provider -->
    <LdapConnectorClass>com.custom.ldap.MyProvider</LdapConnectorClass>
    <LdapResource>MyLdap</LdapResource>
    <Search>
        <BaseDN ref="apigee.baseDN"></BaseDN> <!-- default is dc=apigee,dc=com -->
        <SearchQuery>mail={request.header.mail}</SearchQuery>
        <Attributes>
            <Attribute>address</Attribute>
            <Attribute>phone</Attribute>
            <Attribute>title</Attribute>
        </Attributes>
        <Scope></Scope> <!-- default is subtree -->
    </Search>
</Ldap>

تشير هذه السياسة إلى موفِّر LDAP مخصّص. تستخدم عنوان البريد الإلكتروني في عنوان الطلب لتحديد المستخدم، ثم تستردّ عنوان المستخدم ورقم هاتفه ولقبه من LDAP. يتم تخزين سمات DN المستردّة في متغيّر. يُرجى الاطّلاع على "المتغيّرات الخاصة بالسياسة" .

للبحث في LDAP واسترداد سمات DN، يجب أن يتضمّن الطلب بيانات اعتماد المشرف

مرجع العناصر

في ما يلي أوصاف لسمات وعناصر "سياسة LDAP".

العنصر

الوصف

Ldap

العنصر الرئيسي الذي يحتوي على سمة name لإدخال اسم السياسة

LdapConnectorClass

عند استخدام "سياسة LDAP" مع موفِّر LDAP مخصّص custom LDAP provider (لا يقدّمه Apigee)، حدِّد فئة موصِّل LDAP المؤهلة بالكامل. هذه هي الفئة التي نفّذت فيها واجهة Apigee's ExternalLdapConProvider.

LdapResource

أدخِل اسم بيئة مورد LDAP. لمزيد من المعلومات، يُرجى الاطّلاع على إنشاء مورد LDAP.

BaseDN

المستوى الأساسي من LDAP الذي توجد تحته جميع بياناتك على سبيل المثال، في موفِّر LDAP من Apigee، تكون جميع البيانات ضمن dc=apigee,dc=com.

  • ref: استخدِم هذه السمة لتحديد متغيّر مسار يحتوي على قيمة BaseDN، مثل apigee.baseDN. تأخذ السمة ref الأولوية على قيمة BaseDN الصريحة. إذا حدّدت كلاً من ref وvalue، ستكون الأولوية لـ ref. إذا لم يتم حلّ ref في وقت التشغيل، يتم استخدام value.

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

من خلال تحديد المستخدم باستخدام البيانات الوصفية في الطلب أو الردّ، يمكنك استخدام هذا العنصر لاسترداد سمات DN إضافية للمستخدم من LDAP. على سبيل المثال، إذا كان الطلب يحتوي على عنوان البريد الإلكتروني للمستخدم، وكان 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 في طلبات واجهة برمجة التطبيقات. باستخدام "سياسة LDAP" ، يمكن للتطبيقات مصادقة بيانات الاعتماد من خلال مقارنتها بالمستخدمين المخزّنين في LDAP، ويمكنك استرداد الأسماء المميّزة (DN) من LDAP، وهي البيانات الوصفية أو السمات المرتبطة بكل مستخدم، مثل عنوان البريد الإلكتروني والعنوان ورقم الهاتف. يتم تخزين DN الذي يتم عرضه في متغيّر لـ استخدامه لاحقًا من قِبل خادم وكيل واجهة برمجة التطبيقات.

إنشاء مورد LDAP

تستفيد "سياسة LDAP" من مورد LDAP الذي تنشئه في Apigee Edge. يقدّم مورد LDAP معلومات الاتصال بمستودع LDAP.

لإنشاء موارد LDAP وإدارتها، استخدِم واجهة برمجة التطبيقات والحمولة التاليتَين:

واجهة برمجة التطبيقات

إنشاء (POST) مورد LDAP أو عرض (GET) جميع موارد LDAP:

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

الحصول على تفاصيل مورد LDAP (GET) وتعديله (POST) وحذفه (DELETE):

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

الحمولة

في ما يلي نموذج لحمولة XML مع تعليقات حول الاستخدام.

<LdapResource name="ldap1">
  <Connection>
    <Hosts>
      <!-- port is optional: defaults to 389 for ldap:// and 636 for ldaps:// -->
      <Host port="636">foo.com</Host>
    </Hosts>
    <SSLEnabled>false</SSLEnabled> <!-- optional, defaults to false -->
    <Version>3</Version> <!-- optional, defaults to 3-->
    <Authentication>simple</Authentication> <!-- optional, only simple supported -->
    <ConnectionProvider>jndi|unboundid</ConnectionProvider> <!-- required -->
    <ServerSetType>single|round robin|failover</ServerSetType> <!-- not applicable for jndi -->
    <!-- If using a custom LDAP provider, the fully qualified class: -->
    <LdapConnectorClass>com.custom.ldap.MyProvider</LdapConnectorClass>
  </Connection>
  <ConnectPool enabled="true"> <!-- enabled is optional, defaults to true -->
    <Timeout>30000</Timeout> <!-- optional, in milliseconds; if not set, no timeout -->
    <Maxsize>50</Maxsize> <!-- optional; if not set, no max connections -->
    <Prefsize>30</Prefsize> <!-- optional; if not set, no pref size -->
    <Initsize></Initsize> <!-- optional; if not set, defaults to 1 -->
    <Protocol></Protocol> <!-- optional; if not set, defaults to 'ssl plain' -->
  </ConnectPool>
  <Admin>
    <DN>cn=manager,dc=apigee,dc=com</DN>
    <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:password -d \
  '<LdapResource name="ldap1">
    <Connection>
      <Hosts>
      <Host>foo.com</Host>
      </Hosts>
      <SSLEnabled>false</SSLEnabled>
      <Version>3</Version>
      <Authentication>simple</Authentication>
      <ConnectionProvider>unboundid</ConnectionProvider>
      <ServerSetType>round robin</ServerSetType>
    </Connection>
    <ConnectPool enabled="true">
      <Timeout>30000</Timeout>
      <Maxsize>50</Maxsize>
      <Prefsize>30</Prefsize>
      <Initsize></Initsize>
      <Protocol></Protocol>
    </ConnectPool>
    <Admin>
      <DN>cn=manager,dc=apigee,dc=com</DN>
      <Password>secret</Password>
    </Admin>
  </LdapResource>'

رموز الاستجابة

في ما يلي رموز استجابة HTML التي تعرضها السياسة في حال النجاح أو الفشل:

  • النجاح: 200
  • الفشل: 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 الخاص بمعالج الرسائل.
    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.