Kebijakan LDAP

Anda sedang melihat dokumentasi Apigee Edge.
Buka Dokumentasi Apigee X.
info

Apa

Kebijakan LDAP menyediakan:

  • Authentication: Kredensial pengguna yang diberikan dalam permintaan divalidasi terhadap kredensial di penyedia LDAP. Kebijakan LDAP memberi Anda banyak fleksibilitas dengan memungkinkan Anda menggunakan nilai DN bersama dengan {i>password<i}, bahkan jika nilai DN tersebut yang Anda inginkan tidak ada dalam permintaan. Misalnya, Anda perlu menggunakan email / {i>password<i} untuk autentikasi. Opsi berikut mungkin tersedia:
    • Jika email ada dalam permintaan, Anda cukup menggunakannya dengan sandi untuk LDAP autentikasi.
    • Jika email tidak ada dalam permintaan, tetapi ada atribut DN lain (seperti nomor telepon), Anda dapat menggunakan nomor telepon untuk mendapatkan email yang sesuai dari LDAP, lalu menggunakan email / {i>password<i} untuk mengotentikasi.
  • Penelusuran Nama yang Dibedakan (DN): Selain autentikasi, Anda dapat menggunakan Kebijakan LDAP untuk mengidentifikasi atribut pengguna dalam permintaan, seperti email, dan melakukan kueri yang mengambil atribut DN lain dari LDAP untuk pengguna tersebut. DN yang diambil adalah disimpan dalam variabel.

Gunakan Kebijakan LDAP saat akses ke resource yang dilindungi harus dibatasi untuk pengguna di LDAP Anda —seperti pengguna admin, pengguna organisasi, dan developer—terutama saat Akses token OAuth tidak diperlukan atau terlalu berat. Kebijakan ini juga dirancang untuk mengambil metadata nama domain untuk digunakan dalam alur proxy API.

Misalnya, Anda dapat membuat panggilan API hanya dijalankan ketika pengguna berhasil diautentikasi terhadap LDAP; lalu secara opsional mengambil atribut DN (Nama Domain) untuk pengguna setelah autentikasi berhasil.

Untuk informasi tambahan, lihat:

Contoh

Autentikasi nama pengguna/sandi

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

Sampel ini memberikan otentikasi terhadap penyedia LDAP. Kebijakan meneruskan nama pengguna dan {i>password<i} dari permintaan ke LDAP untuk otentikasi.

Autentikasi atribut 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>

Kebijakan ini mendapatkan DN pengguna dengan email di header permintaan, lalu mengotentikasi pengguna terhadap LDAP dengan {i>password<i} yang diberikan di {i>header<i} permintaan.

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

Kebijakan ini merujuk ke penyedia LDAP kustom. Menggunakan alamat email dalam permintaan untuk mengidentifikasi pengguna, kemudian mengambil alamat, telepon, dan jabatan pengguna dari LDAP. Atribut DN yang diambil disimpan dalam variabel. Lihat "Spesifik per kebijakan "variabel".

Untuk menelusuri LDAP dan mengambil atribut DN, permintaan harus menyertakan administrator memiliki kredensial yang lengkap.

Referensi elemen

Berikut adalah deskripsi elemen dan atribut Kebijakan LDAP.

Elemen

Deskripsi

Ldap

Elemen induk dengan atribut nama untuk Anda masukkan nama kebijakan.

LdapConnectorClass

Saat menggunakan Kebijakan LDAP dengan LDAP kustom provider (tidak disediakan oleh Apigee), tentukan class konektor LDAP yang sepenuhnya memenuhi syarat. Itulah class tempat Anda menerapkan ExternalLdapConProvider Apigee dalam antarmuka berbasis web yang sederhana.

LdapResource

Masukkan nama lingkungan resource LDAP. Lihat Membuat Resource LDAP untuk mendapatkan informasi selengkapnya.

BaseDN

Tingkat dasar LDAP tempat semua data Anda berada. Misalnya, di Penyedia LDAP Apigee, semua data berada di bawah dc=apigee,dc=com.

  • ref: Gunakan untuk menentukan variabel flow yang berisi nilai BaseDN, seperti apigee.baseDN. ref lebih diprioritaskan daripada nilai BaseDN eksplisit. Jika Anda menentukan baik {i>ref<i} maupun {i>value<i}, {i>ref<i} memiliki prioritas. Jika ref tidak di-resolve di nilai durasi, nilai akan digunakan.

Scope

  • object: Autentikasi atau penelusuran hanya terjadi pada tingkat dasar LDAP.
  • onelevel: Autentikasi atau penelusuran terjadi satu tingkat di bawah dasar level organisasi.
  • subtree (default): Autentikasi atau penelusuran terjadi di tingkat dasar dan sepenuhnya rekursif di bawah basis.

Autentikasi

Authentication

Elemen induk untuk perilaku autentikasi yang Anda terapkan.

UserName

Elemen kosong yang menggunakan salah satu atribut berikut:

  • ref: Referensi ke nama pengguna dalam permintaan, seperti request.header.username
  • value: Nama pengguna itu sendiri

Jika Anda tidak mengautentikasi dengan nama pengguna, atau jika nama pengguna tidak disertakan dalam permintaan, Anda tidak perlu menyertakan elemen ini.

Jika nama pengguna ada dalam permintaan, tetapi Anda ingin mengautentikasi pengguna dengan atribut DN selain nama pengguna, seperti email, sertakan SearchQuery untuk mendapatkan email pengguna yang terkait dengan {i>password<i}. Kebijakan LDAP menggunakan nama pengguna untuk mengkueri penyedia LDAP untuk alamat email yang sesuai, yang kemudian digunakan untuk otentikasi.

Password

Elemen kosong yang menggunakan salah satu atribut berikut:

  • ref: Referensi ke sandi dalam permintaan, seperti request.header.password
  • value: Sandi terenkripsi itu sendiri

SearchQuery

Jika Anda ingin mengotentikasi menggunakan atribut DN selain nama pengguna, seperti email, mengkonfigurasi kebijakan LDAP untuk mendapatkan atribut DN dari permintaan (seperti nama pengguna), yang digunakan untuk mengidentifikasi pengguna di LDAP, mengambil email, dan mengotentikasi .

Misalnya, dengan asumsi LDAP mendefinisikan "{i>mail<i}" untuk menyimpan alamat email:

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

Penelusuran

Search

Elemen induk untuk perilaku penelusuran yang Anda terapkan.

SearchQuery

Dengan mengidentifikasi pengguna menggunakan metadata dalam permintaan atau respons, Anda bisa menggunakan untuk mengambil atribut DN tambahan bagi pengguna dari LDAP. Misalnya, jika berisi email pengguna, dan LDAP Anda menentukan atribut mail untuk menyimpan alamat email pengguna, Anda akan menggunakan setelan berikut:

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

Kueri ini menelusuri LDAP untuk email yang cocok dengan email dalam permintaan, dan kebijakan sekarang dapat mengambil atribut DN tambahan untuk pengguna tersebut dengan Atribut .

Attributes

Gunakan satu atau beberapa elemen <Attribute> untuk identifikasi metadata DN yang ingin Anda ambil untuk pengguna. Minimal satu atribut tidak diperlukan.

Misalnya, setelah SearchQuery mengidentifikasi pengguna, metode sekarang dapat mengambil atribut DN untuk pengguna seperti alamat, nomor telepon, dan pada nama pengguna, seperti yang ditunjukkan dalam contoh berikut.

Nilai atribut adalah nama atribut DN yang ditentukan di LDAP Anda.

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

Catatan penggunaan

Apigee Edge untuk Private Cloud memungkinkan Anda memanfaatkan penyedia LDAP dalam panggilan API. Dengan LDAP Kebijakan, aplikasi dapat mengotentikasi kredensial terhadap pengguna yang disimpan di LDAP, dan Anda dapat mengambil nama yang dibedakan (DN) dari LDAP—metadata, atau atribut, yang terkait dengan setiap pengguna, seperti email, alamat, dan nomor telepon. DN yang dikembalikan disimpan dalam variabel untuk digunakan lebih lanjut oleh proxy API.

Membuat resource LDAP

Kebijakan LDAP memanfaatkan resource LDAP yang Anda buat di Apigee Edge. Resource LDAP memberikan informasi koneksi ke repositori LDAP Anda.

Untuk membuat dan mengelola resource LDAP, gunakan API dan payload berikut:

API

Buat (POST) resource atau daftar LDAP (GET) semua resource LDAP:

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

Dapatkan detail untuk (GET), Update (POST), dan Delete (DELETE) resource LDAP:

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

Payload

Berikut adalah contoh payload XML dengan komentar penggunaan.

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

contoh curl: Membuat resource LDAP

Contoh berikut membuat resource LDAP bernama 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>'

Kode respons

Berikut adalah kode respons HTML yang dikembalikan oleh kebijakan untuk keberhasilan atau kegagalan:

  • Berhasil: 200
  • Gagal: 401

Menggunakan penyedia LDAP kustom di Edge untuk Private Cloud

Menggunakan Penyedia LDAP

Apigee Edge untuk Private Cloud dilengkapi dengan penyedia LDAP yang sudah dikonfigurasi untuk berinteraksi dengan Kebijakan LDAP. Namun, jika menggunakan penyedia LDAP khusus, Anda harus mengaktifkan penyedia untuk mendukung Kebijakan LDAP. Untuk melakukannya:

  1. Di class penyedia LDAP, implementasikan antarmuka 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. Di <LdapConnectorClass> konfigurasi kebijakan (bagian berikutnya), tambahkan nama kelas yang sepenuhnya memenuhi syarat dari penyedia LDAP khusus Anda.
  3. Download file ini: custom-ldap.jar_.zip. (Anda mungkin harus mengklik kanan dan memilih Save As.)
  4. Ekstrak file zip-nya.
  5. Tambahkan file custom-ldap.jar ke lingkungan dan pastikan file tersebut ada di classpath Anda.
  6. Buat resource lingkungan untuk penyedia LDAP Anda. Anda akan menggunakan resource lingkungan dalam elemen <LdapResource> kebijakan LDAP.

Menggunakan LDAP SDK UnboundID untuk Java

Anda dapat menggunakan UnboundID LDAP SDK dengan kebijakan LDAP, tetapi Anda harus mendownload versinya terlebih dahulu 2.3.1 dan menambahkannya ke setiap classpath Pemroses Pesan Anda.

Untuk menggunakan SDK LDAP UnboundID dengan kebijakan LDAP:

  1. Buka browser dan buka repositori file Sourceforge untuk UnboundID LDAP SDK:
    https://sourceforge.net/projects/ldap-sdk/files/
  2. Temukan SDK versi 2.3.1 (SE atau Edisi Standar) dan download file ZIP untuk versi itu. Misalnya, download "unboundid-ldapsdk-2.3.1-se.zip".
  3. Ekstrak file JAR dari file ZIP SDK, seperti yang ditunjukkan contoh berikut:
    unzip -j -d ~/tmp ~/Downloads/unboundid-ldapsdk-2.3.1-se.zip unboundid-ldapsdk-2.3.1-se/unboundid-ldapsdk-se.jar

    Perintah ini hanya mengekstrak file JAR ke direktori ~/tmp. Ini akan menghapus direktori dengan -j, meskipun bersifat opsional.

  4. Pada setiap node Pemroses Pesan:
    1. Salin file JAR ke Pemroses Pesan Direktori /opt/apigee/edge-gateway/lib/thirdparty.
    2. Jika perlu, berikan izin kepada pengguna Apigee pada file JAR agar pemroses pesan dapat mengaksesnya.
    3. Edge menambahkan semua library pihak ketiga di Direktori /opt/apigee/edge-gateway/lib/thirdparty ke classpath.

    4. Mulai ulang Pemroses Pesan:
      /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart

Variabel flow

Berikut adalah variabel Kebijakan LDAP yang diisi oleh SearchQuery.

Variabel

Deskripsi

ldap.policyName.execution.success

Setelah kebijakan dijalankan, variabel alur ini akan berisi nilai "true" atau "false", bergantung pada hasilnya.

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

Format fleksibel dari variabel ini, yaitu indeks di khususnya: akun untuk beberapa atribut, serta atribut dengan masing-masing. Indeks adalah angka yang dimulai dari 1. Jika tidak ada nomor indeks yang disediakan, nilai default nomor indeksnya adalah 1.

Jika kebijakan menampilkan alamat, nomor telepon, dan email, Anda dapat mengambil atribut pertama dan nilai menggunakan variabel ini:

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

Jika Anda ingin mengambil atribut alamat ketiga di hasil penelusuran, Anda akan menggunakan ini:

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

Jika sebuah atribut memiliki beberapa nilai (misalnya, jika pengguna memiliki beberapa alamat email Anda), Anda akan mengambil alamat email kedua dari hasil seperti ini:

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

Kode error

Error yang ditampilkan dari kebijakan Edge mengikuti format yang konsisten seperti yang dijelaskan dalam Referensi kode error.

Kebijakan ini menggunakan kode error berikut:

Kode Error Pesan
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.