Chính sách LDAP

Bạn đang xem tài liệu về Apigee Edge.
Truy cập vào tài liệu Apigee X.
Thông tin

Nội dung

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

  • Xác thực: Thông tin đăng nhập của người dùng được cung cấp trong yêu cầu sẽ được xác thực dựa trên thông tin đăng nhập trong trình cung cấp LDAP. Chính sách LDAP mang lại cho bạn nhiều sự linh hoạt 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 mà 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ể chọn trong các phương án sau:
    • Nếu email có trong yêu cầu, bạn chỉ cần sử dụng email đó cùng với mật khẩu để xác thực LDAP.
    • Nếu email không có trong yêu cầu, nhưng một thuộc tính DN khác có (chẳng hạn như số điện thoại), bạn có thể dùng số điện thoại để lấy email tương ứng từ LDAP, sau đó dùng email/mật khẩu để xác thực.
  • Tìm kiếm tên riêng biệt (DN): Ngoài việc xác thực, bạn cũng có thể dùng Chính sách LDAP để xác định một thuộc tính người dùng trong yêu cầu, chẳng hạn như email, và thực hiện một truy vấn để truy xuất các thuộc tính DN khác từ LDAP cho người dùng đó. DN đã truy xuất được lưu trữ trong một biến.

Sử dụng Chính sách LDAP khi quyền truy cập vào các tài nguyên được bảo vệ chỉ nên giới hạn cho người dùng trong nhà cung cấp LDAP của bạn (chẳng hạn như người dùng quản trị, người dùng tổ chức và nhà phát triển), đặc biệt là khi quyền truy cập bằng mã thông báo OAuth là không cần thiết hoặc quá nặng. Chính sách này cũng được thiết kế để 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ể chỉ thực thi một lệnh gọi API khi người dùng được xác thực thành công dựa trên LDAP; sau đó, bạn có thể 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 bằng tên người dùng/mật khẩu

<Ldap name="4GLdapPo>licy<"
   Ld>apRes<ourceldap1/Ld>apRe<source
   Auth>enticati<on
       UserName ref="request.he>ader.use<rname"/
       Password ref=">request.<heade>r.passw<ord&qu>ot;/
   <    Scopesubtree/Scope
   ><    Bas>e<DN ref="apigee.baseDN"/B>aseDN< !-- default is> d<c=api>gee,dc=com --
    /Authentication
 /Ldap

Mẫu này cung cấp quy trình xác thực dựa trên một 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="LdapPo>licy<"
   Ld>apRes<ourceldap1/Ld>apRe<source
   Auth>enticati<on
       Password ref="request.he>ader.pas<sword">/
       SearchQuerymail={<request.head>er.mail}</Sear>chQuery<
     >  Scopes<ubtree/Scope
       BaseDN>< ref=&q>u<ot;apigee.baseDN"/BaseDN !-- >defau<lt is dc=apigee>,d<c=com> --
    /Authentication
 /Ldap

Chính sách này lấy DN của người dùng bằng 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 đề yêu cầu.

Tìm kiếm LDAP

<Ldap name="LdapPo>licy&<quot;
    !-- using a custom LDAP p>rovid<er --
    LdapConn>ectorClasscom.custom.ldap.<MyProvider/LdapConn>ector<Class
    Ld>apReso<urceMyLdap/Ld>apRes<ource<>/span>
    Searc<h
        BaseDN ref="><;apigee>.<baseDN"/BaseDN !-- default is> dc=apige<e,dc=com -->
        SearchQuerymail={<request.head>er.mail}/<SearchQuer>y
        Att<ributes
 >       <    Attrib>uteaddress/At<tribute
 >     <      Attr>ibutephone/At<tribute
 >     <      Attr>ibutetitl<e/Attribute>
        </Attr><ibutes>
<        Scope/S‘cope !-’- d>efaul<t is su>b<tree >--
    /Search
/Ldap

Chính sách này tham chiếu đến một nhà cung cấp LDAP tuỳ chỉnh. Ứng dụng 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ỉ, số đ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 "Các biến theo chính sách cụ thể".

Để 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 đăng nhập của quản trị viên.

Tham chiếu phần tử

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

Phần tử

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 trì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 mà tất cả dữ liệu của bạn tồn tại. Ví dụ: trong trình cung cấp LDAP của Apigee, tất cả dữ liệu đều nằm trong 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 sẽ được ưu tiên hơn giá trị BaseDN rõ ràng. Nếu bạn chỉ định cả ref và value, thì ref sẽ được ưu tiên. Nếu ref không phân giải tại thời gian chạy, thì giá trị sẽ được dùng.

Scope

  • object: 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 ở cấp độ thấp hơn 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à hoàn toàn đệ quy 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: Thông tin tham chiếu đến tên người dùng trong yêu cầu, chẳng hạn như request.header.username
  • value: Bản thân 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, 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 một thuộc tính DN khác với tên người dùng, chẳng hạn như email, hãy thêm một SearchQuery để nhận email người dùng được 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 nhằm tìm địa chỉ email tương ứng, sau đó địa chỉ email này sẽ đượ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: Thông tin tham chiếu đến mật khẩu trong yêu cầu, chẳng hạn như request.header.password
  • giá_trị: Bản thân mật khẩu đã mã hoá

SearchQuery

Nếu bạn muốn xác thực bằng một thuộc tính DN khác ngoà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 để nhận một thuộc tính DN từ yêu cầu (chẳng hạn như tên người dùng). Thuộc tính này đượ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 "mail" để 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 một thuộc tính mail để lưu trữ địa chỉ email của người dùng, thì 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 một email khớp với email trong yêu cầu và chính sách 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 mà bạn muốn truy xuất cho người dùng. Bạn phải cung cấp í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, chẳng hạn như địa chỉ, số điện thoại và chức danh của người dùng, như minh hoạ 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 cho Đám mây riêng tư cho phép bạn tận dụng một trình cung cấp LDAP trong các lệnh gọi API. Với Chính sách LDAP, các ứng dụng có thể xác thực thông tin đăng nhập dựa trên 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 được liên kết với mỗi 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 một tài nguyên LDAP

Chính sách LDAP tận 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 cho kho lưu trữ LDAP của bạn.

Để 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) một tài nguyên LDAP hoặc liệt kê (GET) tất cả tài nguyên LDAP:

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

Lấy thông tin chi tiết cho (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

Phần tải

Sau đây là một tải trọng XML mẫu kèm theo nhận xét về cách sử dụng.

<LdapResource name="l>dap<1"
  >Conne<ction>
    Ho<sts
      !-- port is optional: defaults to 389 for ldap:// and 636 for l>daps://< --
      Host >port=&q<uot;6>36&qu<ot;foo>.com/<Host
    />Hosts<
    SSLEna>b<ledfalse/SSLEnabled !-- optional, >defau<lts to >f<alse --
> <   Version3/Version !-- optio>nal, <defaults to 3->-
    <Authentications>i<mple/Authentication !-- optional, only> simp<le supported --
  >  ConnectionPr<oviderjndi|unboundi>d</ConnectionProv>ider <!-- required >--
    ServerSetTypesingle|<round robin|fa>i<lover/ServerSetType !-- not ap>plica<ble for jndi --
    !-- If using a custom LDAP provider, the fully> qual<ified class: --
  >  LdapConnectorClasscom.cu<stom.ldap.MyProvide>r/L<dapConnecto>rCl<ass
  /Connection
  Connec>t<Pool enabled="true" !-- enabled is> opti<onal, d>efaul<ts to tr>u<e --
    Timeout30000/Timeout !-- optional, in milliseco>nds; <if not >se<t, no ti>m<eout --
    Maxsize50/Maxsize !-- optional; if >not s<et, no m>ax< connecti>o<ns --
    Prefsize30/Prefsize !-- optiona>l; if< not set><, no pref> <size --
    Initsize/Initsize !-- optional>; if <not set,>< defaults> <to 1 --
    Protocol/Protocol !-- optional; if not s>et,< defaults to> &#<39;ss>l pla<in>' --
  /ConnectPool
  A<dmi>n
   < DNcn=ma>nager,<dc=apigee>,dc<=com/D>N<
    Password>secret/Password
  /Admin
/LdapResource

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

Ví dụ sau đây tạo một tài nguyên LDAP có tên là ldap1.

curl -X POST -H "Content-Type: application/xml" \
  https://api.enterprise.apigee.com/v1/organizations/myorg/environments/test/ldapresources \
  -u apigee_email:passwor<d -d \
  'LdapResourc>e nam<e="ld>ap1&quo<t;
  >  Conne<ctio>n
     < Host>s
     < Hostf>oo.com/<Host
     > /Hos<ts
      SS>LEnable<dfalse/>S<SLEnable>d
     < Version3/Vers>ion
  <    Authenticat>ionsimp<le/Authentication
>      Con<nectionProviderunbo>undid/C<onnectionProv>ider
      <ServerSetTyper>ound <robin/Serve>rSetT<ype
    /Connection
    Co>nnectPo<ol enab>led=&<quot;tru>e"<
      >Ti<meout300>00/Time<out
    >  <Maxsize50>/Maxsiz<e
      ><Prefsize3>0/Prefs<ize
    ><  Initsiz>e/Ini<tsize
      >Proto<col/P>rotocol<
 >   /ConnectPool
    Admin
 <   >  DNcn=<manager,>dc=api<gee,dc=co>m/DN
<      >Pas<swordsecret/P>assword
    /Admin
  /LdapResource'

Mã phản hồi

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

  • Thành công: 200
  • Thất bại: 401

Sử dụng trình cung cấp LDAP tuỳ chỉnh trong Edge cho Private Cloud

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

Apigee Edge cho Đám mây riêng đ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 một nhà cung cấp LDAP tuỳ chỉnh, bạn phải bật nhà cung cấp để 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 trình cung cấp LDAP tuỳ chỉnh.
  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 tệp.
  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ằm trong đường dẫn lớp.
  6. Tạo một 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 UnboundID LDAP SDK cho Java

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

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

  1. Mở một trình duyệt rồi chuyển đến kho lưu trữ tệp Sourceforge cho UnboundID LDAP SDK:
    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 rồi tải tệp ZIP xuống cho phiên bản đó. Ví dụ: tải "unboundid-ldapsdk-2.3.1-se.zip" xuống.
  3. Giải nén tệp JAR từ tệp ZIP của SDK, như trong 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. Thư mục này sẽ thả cấu trúc thư mục bằng -j, mặc dù không bắt buộc.

  4. Trên mỗi nút Message Processor:
    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 đối với tệp JAR để bộ xử lý thông báo có thể truy cập vào tệp đó.
    3. Edge thêm tất cả các thư viện bên thứ ba trong thư mục /opt/apigee/edge-gateway/lib/thirdparty vào classpath.

    4. Khởi động lại Trình xử lý tin nhắn:
      /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

Mô tả

ldap.policyName.execution.success

Sau khi chính sách được thực thi, biến luồng này sẽ 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 biệt 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á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 sẽ sử dụng thuộc tính này:

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ừ kết quả như sau:

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

Mã lỗi

Các lỗi được trả về từ chính sách Edge tuân theo một định dạng nhất quán như mô tả trong phần Tài liệu tham khảo về 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.