خط مشی LDAP

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

چی

خط مشی LDAP ارائه می دهد:

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

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

به عنوان مثال، شما می توانید یک فراخوانی 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 و هم مقدار را مشخص کنید، ref اولویت دارد. اگر ref در زمان اجرا حل نشود، مقدار استفاده می شود.

Scope

  • شی : احراز هویت یا جستجو فقط در سطح پایه LDAP انجام می شود.
  • onelevel : احراز هویت یا جستجو یک سطح پایین تر از سطح پایه انجام می شود.
  • زیردرخت (پیش‌فرض): احراز هویت یا جستجو در سطح پایه و کاملاً بازگشتی زیر پایه انجام می‌شود.

احراز هویت

Authentication

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

UserName

عنصر خالی که یکی از ویژگی های زیر را می گیرد:

  • ref : اشاره ای به نام کاربری در درخواست، مانند request.header.username
  • value : خود نام کاربری

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

اگر نام کاربری در درخواست وجود دارد، اما می‌خواهید کاربری را با ویژگی 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 بازیابی کند.

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 و 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

بار

در زیر نمونه ای از محموله 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 برای 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 . (شاید مجبور باشید کلیک راست کرده و Save As را انتخاب کنید.)
  4. آن را از حالت فشرده خارج کنید.
  5. فایل custom-ldap.jar را به محیط خود اضافه کنید و مطمئن شوید که در مسیر کلاس شما قرار دارد.
  6. یک منبع محیطی برای ارائه دهنده LDAP خود ایجاد کنید. شما از نام منبع محیطی در عنصر <LdapResource> خط مشی LDAP استفاده خواهید کرد.

استفاده از UnboundID LDAP SDK برای جاوا

می توانید از 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 یا نسخه استاندارد ) SDK را پیدا کنید و فایل ZIP آن نسخه را دانلود کنید. به عنوان مثال، "unboundid-ldapsdk-2.3.1-se.zip" را دانلود کنید.
  3. همانطور که در مثال زیر نشان داده شده است، فایل JAR را از فایل SDK 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

پس از اجرای خط مشی، این متغیر جریان بسته به نتیجه دارای مقدار "true" یا "false" است.

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

فرمت انعطاف پذیر این متغیر، به ویژه شاخص: ویژگی های متعدد و همچنین ویژگی هایی با مقادیر متعدد را در نظر می گیرد. Index عددی است که از 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.