查看 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 政策與自訂 LDAP 搭配使用時
provider (非 Apigee 提供),請指定完整的 LDAP 連接器類別。
也就是您在該類別中實作 Apigee 的 |
|
輸入 LDAP 資源的環境名稱。請參閱建立 LDAP 資源。 |
|
LDAP 的基底層級,也就是您所有資料的基礎層級。例如,在
Apigee 的 LDAP 提供者,所有資料都低於
|
|
|
驗證 |
|
|
實作的驗證行為的父項元素。 |
|
具有下列其中一項屬性的空白元素:
如果不以使用者名稱驗證, 就不需要加入這個元素。 如果要求中包含使用者名稱,但您想利用 DN 屬性驗證使用者
除了使用者名稱 (例如電子郵件),請一併加上 |
|
具有下列其中一項屬性的空白元素:
|
|
如要使用使用者名稱以外的 DN 屬性 (例如電子郵件) 進行驗證。 設定 LDAP 政策,從要求中取得 DN 屬性 (例如使用者名稱)。 這可用於識別 LDAP 中的使用者、擷取電子郵件,以及驗證 內容。 舉例來說,假設 LDAP 定義了「mail」屬性儲存電子郵件地址:
|
搜尋 |
|
|
實作搜尋行為的父項元素。 |
|
透過在要求或回應中的中繼資料識別使用者,您就能利用
元素,從 LDAP 擷取使用者的其他 DN 屬性。舉例來說,
要求中包含使用者電子郵件地址,而您的 LDAP 為
這個查詢會在 LDAP 中搜尋與要求中電子郵件地址相符的電子郵件, 政策現在可以透過屬性擷取使用者的其他 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 政策步驟如下:
- 在 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(); }
- 在政策設定的
<LdapConnectorClass>
中 (下一節), 新增自訂 LDAP 提供者的完整類別名稱。 - 下載這個檔案:custom-ldap.jar_.zip。 (您可能需要按一下滑鼠右鍵並選取「另存新檔」)。
- 解壓縮。
- 將自訂 ldap.jar 檔案新增至環境,並確認該檔案位於類別路徑中。
- 為 LDAP 提供者建立環境資源。您將使用環境資源
LDAP 政策
<LdapResource>
元素中的名稱。
使用 Java 適用的無繫結 ID LDAP SDK
您可以將 UnboundID LDAP SDK 與 LDAP 政策搭配使用,但必須先下載版本 2.3.1,然後將其新增至每個訊息處理器的類別路徑中。
如何將 UnboundID LDAP SDK 與 LDAP 政策搭配使用:
- 開啟瀏覽器並前往 UnboundID LDAP SDK 的 Sourceforge 檔案存放區:
https://sourceforge.net/projects/ldap-sdk/files/
- 找出 2.3.1 版 (SE 或標準版) 的 SDK 並下載 ZIP 檔案 。例如,下載「unboundid-ldapsdk-2.3.1-se.zip」。
- 從 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
整合,但這是選用步驟 - 在每個訊息處理器節點上:
- 將 JAR 檔案複製到訊息處理器的
/opt/apigee/edge-gateway/lib/thirdparty
目錄內。 - 如有必要,請將 JAR 檔案的權限授予 Apigee 使用者,讓訊息處理工具能存取該檔案。
- 重新啟動訊息處理器:
/opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
Edge 會在
/opt/apigee/edge-gateway/lib/thirdparty
目錄設為類別路徑。 - 將 JAR 檔案複製到訊息處理器的
流程變數
以下是由 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. |