LDAP 政策

查看 Apigee Edge 說明文件。
前往 Apigee X說明文件
資訊

結果

LDAP 政策提供:

  • 驗證:在要求中提供的使用者憑證已通過驗證 比對 LDAP 提供者的憑證LDAP 政策可讓您在內部管理 驗證,讓您在密碼中使用任何 DN 值與密碼,即使該 DN 值 您不希望看到想要的圖片出現在請求中舉例來說,假設您需要使用電子郵件 / 密碼 驗證。可能的選項如下:
    • 如果要求中包含電子郵件,您可以直接使用該電子郵件,搭配 LDAP 的密碼 驗證。
    • 如果要求中並未列出電子郵件地址,而是另一個 DN 屬性 (例如電話號碼): 您就可以使用電話號碼從 LDAP 取得對應的電子郵件,然後使用電子郵件地址 / 進行驗證。
  • 辨別名稱 (DN) 搜尋:除了驗證之外,您還可以 也會使用 LDAP 政策識別要求中的使用者屬性 (例如電子郵件),以及 執行從 LDAP 擷取該使用者的其他 DN 屬性的查詢。擷取的 DN 為 儲存在變數中

只有在存取受保護資源時,只有 LDAP 中的使用者才能使用 LDAP 政策 例如管理員使用者、機構使用者和開發人員 OAuth 權杖存取權不必要或過於繁重。這項政策也是專為 擷取用於 API Proxy 流程的網域名稱中繼資料。

舉例來說,您可以只在使用者成功通過驗證時執行 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 搭配使用時 provider (非 Apigee 提供),請指定完整的 LDAP 連接器類別。 也就是您在該類別中實作 Apigee 的 ExternalLdapConProvider 存取 API

LdapResource

輸入 LDAP 資源的環境名稱。請參閱建立 LDAP 資源

BaseDN

LDAP 的基底層級,也就是您所有資料的基礎層級。例如,在 Apigee 的 LDAP 提供者,所有資料都低於 dc=apigee,dc=com

  • ref:用於指定包含 BaseDN 值的流程變數,例如 apigee.baseDN.參照的優先順序高於明確的 BaseDN 值。如果指定 ref 和 value 皆是 ref 的優先處理順序如果無法解決參照 執行階段,值則會用於該物件。

Scope

  • object:驗證或搜尋僅發生於 LDAP。
  • onelevel:驗證或搜尋發生在低於基準的一個層級 第二,自訂角色只能 套用至專案或機構
  • subtree (預設):驗證或搜尋會在基礎層級 並以遞迴方式在底層以下

驗證

Authentication

實作的驗證行為的父項元素。

UserName

具有下列其中一項屬性的空白元素:

  • ref:要求中使用者名稱的參照,例如 request.header.username
  • value:使用者名稱本身

如果不以使用者名稱驗證, 就不需要加入這個元素。

如果要求中包含使用者名稱,但您想利用 DN 屬性驗證使用者 除了使用者名稱 (例如電子郵件),請一併加上 SearchQuery,以便接收使用者電子郵件 與密碼相關聯LDAP 政策會透過使用者名稱查詢 LDAP 提供者 隨後用於驗證。

Password

具有下列其中一項屬性的空白元素:

  • ref:要求中密碼的參照,例如 request.header.password
  • value:加密密碼本身

SearchQuery

如要使用使用者名稱以外的 DN 屬性 (例如電子郵件) 進行驗證。 設定 LDAP 政策,從要求中取得 DN 屬性 (例如使用者名稱)。 這可用於識別 LDAP 中的使用者、擷取電子郵件,以及驗證 內容。

舉例來說,假設 LDAP 定義了「mail」屬性儲存電子郵件地址:

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

搜尋

Search

實作搜尋行為的父項元素。

SearchQuery

透過在要求或回應中的中繼資料識別使用者,您就能利用 元素,從 LDAP 擷取使用者的其他 DN 屬性。舉例來說, 要求中包含使用者電子郵件地址,而您的 LDAP 為mail 儲存使用者電子郵件地址,請使用以下設定:

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

這個查詢會在 LDAP 中搜尋與要求中電子郵件地址相符的電子郵件, 政策現在可以透過屬性擷取使用者的其他 DN 屬性 元素。

Attributes

使用一或多個 <Attribute> 元素: 找出您要擷取的使用者 DN 中繼資料。至少有一個屬性 這通常代表交易 不會十分要求關聯語意

例如,SearchQuery 識別使用者之後, 政策現在可以擷取使用者的 DN 屬性,例如地址、電話號碼和 使用者的職稱,如以下範例所示。

屬性值是指 LDAP 中定義的 DN 屬性名稱。

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

使用須知

Apigee Edge 中的私有雲可讓您在 API 呼叫中使用 LDAP 提供者。與 LDAP 透過政策,應用程式可以驗證儲存在 LDAP 中的使用者憑證,而且您可以 從 LDAP 擷取辨別名稱 (DN),也就是 例如電子郵件地址、地址和電話號碼傳回的 DN 會儲存在 進一步用於 API Proxy

建立 LDAP 資源

LDAP 政策會使用您在 Apigee Edge 中建立的 LDAP 資源。LDAP 資源 提供 LDAP 存放區的連線資訊。

如要建立及管理 LDAP 資源,請使用下列 API 和酬載:

API

建立 (POST) 一份 LDAP 資源或清單 (GET) 所有 LDAP 資源:

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

取得 LDAP 資源 (GET)、更新 (POST) 和刪除 (DELETE) 的詳細資料:

/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 資源

以下範例會建立名為 ldap1 的 LDAP 資源。

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

在 Edge 中使用自訂的 LDAP 提供者

使用自訂 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. 將自訂 ldap.jar 檔案新增至環境,並確認該檔案位於類別路徑中。
  6. 為 LDAP 提供者建立環境資源。您將使用環境資源 LDAP 政策 <LdapResource> 元素中的名稱。

使用 Java 適用的無繫結 ID LDAP SDK

您可以將 UnboundID LDAP SDK 與 LDAP 政策搭配使用,但必須先下載版本 2.3.1,然後將其新增至每個訊息處理器的類別路徑中。

如何將 UnboundID LDAP SDK 與 LDAP 政策搭配使用:

  1. 開啟瀏覽器並前往 UnboundID LDAP SDK 的 Sourceforge 檔案存放區:
    https://sourceforge.net/projects/ldap-sdk/files/
  2. 找出 2.3.1 版 (SE 或標準版) 的 SDK 並下載 ZIP 檔案 。例如,下載「unboundid-ldapsdk-2.3.1-se.zip」。
  3. 從 SDK ZIP 檔案擷取 JAR 檔案,如以下範例所示:
    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. 如有必要,請將 JAR 檔案的權限授予 Apigee 使用者,讓訊息處理工具能存取該檔案。
    3. Edge 會在 /opt/apigee/edge-gateway/lib/thirdparty 目錄設為類別路徑。

    4. 重新啟動訊息處理器:
      /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart

流程變數

以下是由 SearchQuery 填入的 LDAP 政策變數。

變數

說明

ldap.policyName.execution.success

執行政策後,這個流程變數含有「true」的值或「false」, 根據搜尋結果靈活調整

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

這個變數的彈性格式 特別是:會計算多項屬性和擁有多個屬性的屬性 輕鬆分配獎金索引是從 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.