خط‌مشی LDAP

درحال مشاهده اسناد Apigee Edge هستید.
به اسناد Apigee X بروید.
اطلاعات

چه

«خط‌مشی LDAP» موارد زیر را ارائه می‌دهد:

  • اصالت‌سنجی: اطلاعات اعتباری کاربر که در درخواست ارائه شده است دربرابر اطلاعات اعتباری در فراهم‌کننده LDAP تأیید اعتبار می‌شود. خط‌مشی LDAP به شما انعطاف‌پذیری زیادی در اصالت‌سنجی می‌دهد و به شما امکان می‌دهد از هر مقدار DN همراه با گذرواژه استفاده کنید، حتی اگر آن مقدار DN موردنظر شما در درخواست نباشد. برای مثال، فرض کنید برای اصالت‌سنجی باید از ایمیل / گذرواژه استفاده کنید. گزینه‌های زیر امکان‌پذیر است:
    • اگر ایمیل در درخواست باشد، می‌توانید به‌سادگی از آن همراه با گذرواژه برای اصالت‌سنجی LDAP استفاده کنید.
    • اگر ایمیل در درخواست وجود ندارد، اما مشخصه DN دیگری وجود دارد (مثلاً شماره تلفن)، می‌توانید از شماره تلفن برای دریافت ایمیل مربوطه از LDAP استفاده کنید، سپس از ایمیل / گذرواژه برای اصالت‌سنجی استفاده کنید.
  • جستجوی نام متمایز (DN): علاوه‌بر اصالت‌سنجی، می‌توانید از «خط‌مشی LDAP» نیز برای شناسایی مشخصه کاربر در درخواست، مثل ایمیل، استفاده کنید و پُرسمانی انجام دهید که مشخصه‌های DN دیگر را از LDAP برای آن کاربر بازیابی کند. ‫DN بازیابی‌شده در متغیری ذخیره می‌شود.

وقتی دسترسی به منابع محافظت‌شده باید به کاربران ارائه‌دهنده LDAP شما محدود شود، از «خط‌مشی LDAP» استفاده کنید—برای مثال، کاربران سرپرست، کاربران سازمان، و توسعه‌دهندگان—به‌ویژه وقتی دسترسی به ژتون OAuth یا غیرضروری است یا بیش‌ازحد سنگین است. این خط‌مشی همچنین برای بازیابی فراداده نام دامنه برای استفاده در جریان‌های پراکسی میانای برنامه‌سازی کاربردی طراحی شده است.

برای مثال، می‌توانید فراخوانی API را فقط زمانی اجرا کنید که کاربر دربرابر 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

عنصر والد با مشخصه نام برای وارد کردن نام خط‌مشی.

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 انجام می‌شود.
  • یک‌سطحی: اصالت‌سنجی یا جستجو در یک سطح پایین‌تر از سطح پایه رخ می‌دهد.
  • زیردرخت (پیش‌فرض): اصالت‌سنجی یا جستجو در سطح پایه و به‌طور کامل بازگشتی در زیر پایه انجام می‌شود.

اصالت‌سنجی

Authentication

عنصر والد برای رفتار اصالت‌سنجی که پیاده‌سازی می‌کنید.

UserName

عنصر خالی که یکی از مشخصه‌های زیر را می‌گیرد:

  • ref: مرجعی برای نام کاربری در درخواست، مثل request.header.username
  • مقدار: خود نام کاربری

اگر با نام کاربری اصالت‌سنجی نمی‌کنید، یا اگر نام کاربری در درخواست گنجانده نشده است، نیازی نیست این عنصر را اضافه کنید.

اگر نام کاربری در درخواست باشد، اما بخواهید کاربری را با مشخصه DN به‌جز نام کاربری، مثل ایمیل، اصالت‌سنجی کنید، SearchQuery را اضافه کنید تا ایمیل کاربر منسوب به گذرواژه را دریافت کنید. خط‌مشی LDAP از نام کاربری برای پُرسمان کردن ارائه‌دهنده LDAP برای نشانی ایمیل مربوطه استفاده می‌کند، که سپس برای اصالت‌سنجی استفاده می‌شود.

Password

عنصر خالی که یکی از مشخصه‌های زیر را می‌گیرد:

  • ref: ارجاع به گذرواژه در درخواست، مانند request.header.password
  • مقدار: خود گذرواژه رمزگذاری‌شده

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

از یک یا چند عنصر <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 ذخیره می‌شود.

ایجاد منبع LDAP

خط‌مشی LDAP از منبع LDAP که در Apigee Edge ایجاد می‌کنید استفاده می‌کند. منبع LDAP اطلاعات اتصال به مخزن LDAP شما را ارائه می‌دهد.

برای ایجاد و مدیریت منابع LDAP، از 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

پایه‌بار

در زیر نمونه‌ای از محتوای 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 آورده شده است که خط‌مشی برای موفقیت یا عدم موفقیت برمی‌گرداند:

  • موفقیت‌آمیز: ۲۰۰
  • عدم موفقیت: ۴۰۱

استفاده از ارائه‌دهنده سفارشی LDAP در Edge برای «ابر خصوصی»

استفاده از ارائه‌دهنده سفارشی 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 برای Java

می‌توانید از «کیت توسعه نرم‌افزار UnboundID LDAP» با خط‌مشی LDAP استفاده کنید، اما ابتدا باید نسخه ۲.۳.۱ را بارگیری کنید و آن را به هریک از مسیرهای کلاس «پردازشگر پیام» اضافه کنید.

برای استفاده از UnboundID LDAP SDK با خط‌مشی LDAP:

  1. مرورگری را باز کنید و به مخزن فایل Sourceforge برای UnboundID LDAP SDK پیمایش کنید:
    https://sourceforge.net/projects/ldap-sdk/files/
  2. نسخه ۲.۳.۱ (SE یا نسخه استاندارد) کیت توسعه نرم‌افزار را پیدا کنید و فایل ZIP برای آن نسخه را بارگیری کنید. برای مثال، «unboundid-ldapsdk-2.3.1-se.zip» را بارگیری کنید.
  3. فایل JAR را از فایل ZIP کیت توسعه نرم‌افزار استخراج کنید، همان‌طور که در مثال زیر نشان داده شده است:
    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

پس‌از اجرای خط‌مشی، این متغیر جریان بسته به نتیجه، مقدار «درست» یا «نادرست» را دربرمی‌گیرد.

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

قالب انعطاف‌پذیر این متغیر، به‌ویژه شاخص در چندین مشخصه و همچنین مشخصه‌های دارای چندین مقدار را درنظر می‌گیرد. شاخص عددی است که از ۱ شروع می‌شود. اگر شماره شاخصی ارائه نشود، شماره شاخص پیش‌فرض ۱ است.

اگر خط‌مشی نشانی، تلفن، و ایمیل را برگرداند، می‌توانید اولین مقدار و مشخصه را بااستفاده از این متغیرها بازیابی کنید:

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.