Chính sách LDAP

Bạn đang xem tài liệu về Apigee Edge.
Chuyển đến tài liệu về Apigee X.
thông tin

Nội dung

Chính sách LDAP cung cấp:

  • Xác thực: Thông tin xác thực của người dùng được cung cấp trong yêu cầu được xác thực theo thông tin xác thực của nhà cung cấp LDAP. Chính sách LDAP mang lại cho bạn tính linh hoạt cao trong việc xác thực, cho phép bạn sử dụng bất kỳ giá trị DN nào cùng với mật khẩu, ngay cả khi giá trị DN bạn muốn không có trong yêu cầu. Ví dụ: giả sử bạn cần sử dụng email / mật khẩu để xác thực. Bạn có thể sử dụng các lựa chọn sau:
    • Nếu email có trong yêu cầu, bạn chỉ cần sử dụng email đó với mật khẩu để xác thực LDAP.
    • Nếu email không có trong yêu cầu nhưng có một thuộc tính DN khác (chẳng hạn như số điện thoại), bạn có thể dùng số điện thoại này để nhận email tương ứng từ LDAP, sau đó dùng email/mật khẩu để xác thực.
  • Tìm kiếm tên phân biệt (DN): Ngoài việc xác thực, bạn cũng có thể sử dụng Chính sách LDAP để xác định thuộc tính người dùng trong yêu cầu, chẳng hạn như email và thực hiện truy vấn để truy xuất các thuộc tính DN khác từ LDAP cho người dùng đó. DN được truy xuất được lưu trữ trong một biến.

Sử dụng Chính sách LDAP khi chỉ có quyền truy cập vào các tài nguyên được bảo vệ chỉ dành cho những người dùng trong nhà cung cấp LDAP – chẳng hạn như người dùng quản trị, người dùng trong tổ chức và nhà phát triển – đặc biệt khi quyền truy cập mã thông báo OAuth không cần thiết hoặc quá nặng. Chính sách này cũng được thiết kế cho việc truy xuất siêu dữ liệu tên miền để sử dụng trong các luồng proxy API.

Ví dụ: bạn có thể yêu cầu lệnh gọi API chỉ thực thi khi người dùng được xác thực thành công dựa trên LDAP; sau đó truy xuất các thuộc tính DN (Tên miền) cho người dùng sau khi xác thực thành công.

Để biết thêm thông tin, hãy xem:

Mẫu

Xác thực tên người dùng/mật khẩu

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

Mẫu này cung cấp phương thức xác thực với nhà cung cấp LDAP. Chính sách này chuyển tên người dùng và mật khẩu từ yêu cầu đến LDAP để xác thực.

Xác thực thuộc tính 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>

Chính sách này sẽ lấy DN của người dùng có email trong tiêu đề yêu cầu, sau đó xác thực người dùng dựa trên LDAP bằng mật khẩu được cung cấp trong tiêu đề của yêu cầu.

Đang tìm kiếm 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>

Chính sách này tham chiếu đến một nhà cung cấp LDAP tuỳ chỉnh. Giao thức này sử dụng địa chỉ email trong tiêu đề yêu cầu để xác định người dùng, sau đó truy xuất địa chỉ, điện thoại và chức danh của người dùng từ LDAP. Các thuộc tính DN đã truy xuất được lưu trữ trong một biến. Xem phần "Biến dành riêng cho chính sách".

Để tìm kiếm LDAP và truy xuất các thuộc tính DN, yêu cầu phải bao gồm thông tin xác thực của quản trị viên.

Tham chiếu phần tử

Sau đây là mô tả các phần tử và thuộc tính của Chính sách LDAP.

Phần tử

Nội dung mô tả

Ldap

Phần tử mẹ có thuộc tính tên để bạn nhập tên chính sách.

LdapConnectorClass

Khi sử dụng Chính sách LDAP với một nhà cung cấp LDAP tuỳ chỉnh (không do Apigee cung cấp), hãy chỉ định lớp trình kết nối LDAP đủ điều kiện. Đó là lớp mà bạn đã triển khai giao diện ExternalLdapConProvider của Apigee.

LdapResource

Nhập tên môi trường của tài nguyên LDAP. Hãy xem phần Tạo tài nguyên LDAP để biết thêm thông tin.

BaseDN

Cấp độ cơ sở của LDAP nơi tất cả dữ liệu của bạn tồn tại. Ví dụ: trong nhà cung cấp LDAP của Apigee, tất cả dữ liệu đều thuộc dc=apigee,dc=com.

  • ref: Dùng để chỉ định một biến luồng chứa giá trị BaseDN, chẳng hạn như apigee.baseDN. ref được ưu tiên hơn giá trị BaseDN rõ ràng. Nếu bạn chỉ định cả tham chiếu và giá trị, thì tham chiếu sẽ có mức độ ưu tiên. Nếu tham chiếu không phân giải trong thời gian chạy, thì giá trị sẽ được sử dụng.

Scope

  • đối tượng: Quá trình xác thực hoặc tìm kiếm chỉ diễn ra ở cấp cơ sở của LDAP.
  • onelevel: Quá trình xác thực hoặc tìm kiếm diễn ra dưới một cấp dưới cấp cơ sở.
  • subtree (mặc định): Quá trình xác thực hoặc tìm kiếm diễn ra ở cấp cơ sở và đệ quy hoàn toàn bên dưới cơ sở.

Xác thực

Authentication

Phần tử mẹ cho hành vi xác thực mà bạn triển khai.

UserName

Phần tử trống có một trong các thuộc tính sau:

  • ref: Tham chiếu đến tên người dùng trong yêu cầu, chẳng hạn như request.header.username
  • value: Chính tên người dùng

Nếu không xác thực bằng tên người dùng hoặc nếu tên người dùng không có trong yêu cầu, thì bạn không cần thêm phần tử này.

Nếu tên người dùng có trong yêu cầu nhưng bạn muốn xác thực người dùng bằng thuộc tính DN thay vì tên người dùng (chẳng hạn như email), hãy thêm SearchQuery để lấy email của người dùng liên kết với mật khẩu đó. Chính sách LDAP sử dụng tên người dùng để truy vấn nhà cung cấp LDAP về địa chỉ email tương ứng, địa chỉ này sau đó được dùng để xác thực.

Password

Phần tử trống có một trong các thuộc tính sau:

  • ref: Nội dung tham chiếu đến mật khẩu trong yêu cầu, chẳng hạn như request.header.password
  • value: Chính mật khẩu đã mã hoá

SearchQuery

Nếu bạn muốn xác thực bằng thuộc tính DN khác với tên người dùng, chẳng hạn như email, hãy định cấu hình chính sách LDAP để lấy thuộc tính DN từ yêu cầu (chẳng hạn như tên người dùng) được dùng để xác định người dùng trong LDAP, truy xuất email và xác thực người dùng.

Ví dụ: giả sử LDAP xác định thuộc tính "thư" để lưu trữ địa chỉ email:

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

Tìm kiếm

Search

Phần tử mẹ cho hành vi tìm kiếm mà bạn triển khai.

SearchQuery

Bằng cách xác định người dùng bằng siêu dữ liệu trong yêu cầu hoặc phản hồi, bạn có thể sử dụng phần tử này để truy xuất các thuộc tính DN bổ sung cho người dùng từ LDAP. Ví dụ: nếu yêu cầu chứa email của người dùng và LDAP của bạn xác định thuộc tính mail để lưu trữ địa chỉ email của người dùng, bạn sẽ sử dụng chế độ cài đặt sau:

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

Truy vấn này tìm kiếm trong LDAP để tìm một email khớp với email trong yêu cầu và chính sách này hiện có thể truy xuất các thuộc tính DN bổ sung cho người dùng đó bằng phần tử Thuộc tính.

Attributes

Sử dụng một hoặc nhiều phần tử <Attribute> để xác định siêu dữ liệu DN bạn muốn truy xuất cho người dùng. Bạn phải có ít nhất một thuộc tính.

Ví dụ: sau khi SearchQuery xác định người dùng, chính sách hiện có thể truy xuất các thuộc tính DN cho người dùng như địa chỉ, số điện thoại và chức danh của người dùng, như trong ví dụ sau.

Giá trị thuộc tính là tên thuộc tính DN được xác định trong LDAP.

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

Lưu ý về cách sử dụng

Apigee Edge for Private Cloud cho phép bạn tận dụng nhà cung cấp LDAP trong các lệnh gọi API. Với Chính sách LDAP, ứng dụng có thể xác thực thông tin xác thực với người dùng được lưu trữ trong LDAP và bạn có thể truy xuất tên phân biệt (DN) từ LDAP – siêu dữ liệu hoặc thuộc tính liên kết với từng người dùng, chẳng hạn như email, địa chỉ và số điện thoại. DN được trả về sẽ được lưu trữ trong một biến để proxy API sử dụng thêm.

Tạo tài nguyên LDAP

Chính sách LDAP sử dụng một tài nguyên LDAP mà bạn tạo trong Apigee Edge. Tài nguyên LDAP cung cấp thông tin kết nối đến kho lưu trữ LDAP.

Để tạo và quản lý tài nguyên LDAP, hãy sử dụng API và tải trọng sau:

API

Tạo (POST) tài nguyên hoặc danh sách LDAP (GET) tất cả tài nguyên LDAP:

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

Nhận thông tin chi tiết về (GET), Cập nhật (POST) và Xoá (DELETE) một tài nguyên LDAP:

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

Dung lượng

Dưới đây là tải trọng XML mẫu cùng với nhận xét về việc sử dụng.

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

ví dụ về curl: Tạo tài nguyên LDAP

Ví dụ sau đây tạo một tài nguyên LDAP có tên 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>'

Mã phản hồi

Sau đây là các mã phản hồi HTML mà chính sách trả về khi thành công hoặc không thành công:

  • Thành công: 200
  • Không thành công: 401

Sử dụng nhà cung cấp LDAP tuỳ chỉnh trong Edge cho Đám mây riêng tư

Sử dụng nhà cung cấp LDAP tuỳ chỉnh

Apigee Edge for Private Cloud đi kèm với một nhà cung cấp LDAP đã được định cấu hình để tương tác với Chính sách LDAP. Tuy nhiên, nếu đang sử dụng nhà cung cấp LDAP tuỳ chỉnh, bạn phải bật nhà cung cấp này để hỗ trợ Chính sách LDAP. Để thực hiện việc này:

  1. Trong lớp nhà cung cấp LDAP, hãy triển khai giao diện 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. Trong <LdapConnectorClass> của cấu hình chính sách (các phần tiếp theo), hãy thêm tên lớp đủ điều kiện của nhà cung cấp LDAP tùy chỉnh của bạn.
  3. Tải tệp này xuống: custom-ldap.jar_.zip. (Bạn có thể phải nhấp chuột phải rồi chọn Lưu dưới dạng.)
  4. Giải nén.
  5. Thêm tệp custom-ldap.jar vào môi trường của bạn và đảm bảo rằng tệp này nằm trong classpath.
  6. Tạo tài nguyên môi trường cho nhà cung cấp LDAP. Bạn sẽ sử dụng tên tài nguyên môi trường trong phần tử <LdapResource> của chính sách LDAP.

Sử dụng SDK LDAP UnboundID cho Java

Bạn có thể sử dụng SDK LDAP UnboundID với chính sách LDAP, nhưng trước tiên, bạn phải tải xuống phiên bản 2.3.1 rồi thêm phiên bản này vào từng classpath của Bộ xử lý thông báo.

Cách sử dụng SDK LDAP UnboundID với chính sách LDAP:

  1. Mở trình duyệt rồi chuyển đến kho lưu trữ tệp Sourceforge của SDK LDAP UnboundID:
    https://sourceforge.net/projects/ldap-sdk/files/
  2. Tìm phiên bản 2.3.1 (SE hoặc Standard Edition) của SDK và tải tệp ZIP xuống cho phiên bản đó. Ví dụ: tải xuống "unboundid-ldapsdk-2.3.1-se.zip".
  3. Trích xuất tệp JAR từ tệp ZIP của SDK như ví dụ sau:
    unzip -j -d ~/tmp ~/Downloads/unboundid-ldapsdk-2.3.1-se.zip unboundid-ldapsdk-2.3.1-se/unboundid-ldapsdk-se.jar

    Lệnh này chỉ trích xuất tệp JAR vào thư mục ~/tmp. Thao tác này sẽ bỏ cấu trúc thư mục bằng -j, mặc dù thao tác này là không bắt buộc.

  4. Trên mỗi nút Bộ xử lý thông báo:
    1. Sao chép tệp JAR vào thư mục /opt/apigee/edge-gateway/lib/thirdparty của Trình xử lý thông báo.
    2. Nếu cần, hãy cấp cho người dùng Apigee quyền truy cập vào tệp JAR để trình xử lý thông báo có thể truy cập tệp đó.
    3. Edge thêm tất cả thư viện của bên thứ ba trong thư mục /opt/apigee/edge-gateway/lib/thirdparty vào classpath.

    4. Khởi động lại bộ xử lý thư:
      /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart

Biến luồng

Sau đây là các biến Chính sách LDAP do SearchQuery điền sẵn.

Biến

Nội dung mô tả

ldap.policyName.execution.success

Sau khi thực thi chính sách, biến luồng này chứa giá trị "true" hoặc "false", tuỳ thuộc vào kết quả.

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

Định dạng linh hoạt của biến này, cụ thể là chỉ mục: tính đến nhiều thuộc tính, cũng như các thuộc tính có nhiều giá trị. Chỉ mục là một số bắt đầu từ 1. Nếu bạn không cung cấp số chỉ mục, số chỉ mục mặc định sẽ là 1.

Nếu chính sách trả về địa chỉ, số điện thoại và email, bạn có thể truy xuất thuộc tính và giá trị đầu tiên bằng cách sử dụng các biến sau:

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

Nếu muốn truy xuất thuộc tính địa chỉ thứ ba trong kết quả tìm kiếm, bạn nên dùng thuộc tính sau:

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

Nếu một thuộc tính có nhiều giá trị (ví dụ: nếu người dùng có nhiều địa chỉ email), bạn sẽ truy xuất địa chỉ email thứ hai từ các kết quả như sau:

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

Mã lỗi

Lỗi được trả về từ chính sách Edge theo một định dạng nhất quán như mô tả trong Tài liệu tham khảo mã lỗi.

Chính sách này sử dụng những mã lỗi sau:

Mã lỗi Thông điệp
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.