Skip to main content
Version: 2.8.1

LDAP Authentication

用途說明#

對服務或路由增加一個藉由帳號及密碼保護的 LDAP 驗證。此插件會從 Proxy-AuthorizationAuthorization 的標頭內確認有效憑證。

欄位配置說明#

變數類型預設值說明必填
hide_credentialsbooleanfalse此欄位決定將請求往後送至服務時是否帶上原本的驗證標頭內容。
設定為 true 時,插件會把驗證內容自請求移除。
V
ldap_hoststringLDAP 伺服器主機位置。V
ldap_portnumber389LDAP 伺服器的 TCP 連接埠。
預設 389 給 non-SSL LDAP 和 AD 使用。
636 是給 SSL LDAP 和 AD 使用。如果 ldaps 項目開啟,則必須使用 636。
此欄位接受輸入的值區間為 0 至 65535。
V
start_tlsbooleanfalse開啟此選項 (設為 true) 會在 ldap 連線發布 StartTLS (Transport Layer Security) 延伸操作。
如果 start_tls 設定開啟,則確保 ldaps 是關閉(禁用)狀態。
V
ldapsbooleanfalse開啟此選項 (設為 true) 則使用 LDAPS 協定做連線 (LDAP over TLS)。
ldaps 開啟時,必須使用 636 連接埠,並且確保 start_tls 是關閉(禁用)狀態。
V
base_dnstring在搜尋時作為起點的 Base DN。例如:dc=example,dc=com。V
verify_ldap_hostbooleanfalse開啟此選項來驗證 LDAP 伺服器。伺服器憑證會藉由 lua_ssl_trusted_certificate 底下之 CA 證書做驗證。V
attributestring搜尋用戶時的屬性。例如:cn。V
cache_ttlnumber60快取存活時間(單位為秒)。V
timeoutnumber10000對 LDAP 伺服器之等待連線逾時時間(單位為毫秒)。
keepalivenumber60000對 LDAP 伺服器閒置之連線保持連線狀態之時間(單位為毫秒)。
anonymousstring可設定 anonymous 使用者在驗證失敗時會使用此身份當作匿名用戶。
若此欄位為空,則當執行請求的身份認證時失敗時,會收到身份驗證失敗 4xx 的回應。
*要注意的是,此欄位需填入的是 consumer 本身之 id,而不是 custom_id 。
header_typestringldap可填入欲帶入驗證標頭的字串。預設標頭的樣子會是 Authorization: ldap base64(username:password) ,如果 header_type 設定為 basic,則會變成 Authorization: basic base64(username:password) 。可為任意字串。

用法示例#

在全局啟用插件#

  1. 從網站左邊 Menu 中 外掛插件 頁面中,點選右上角的 新增外掛插件

全局啟用畫面

  1. 點選後,選擇 認證 頁籤,並啟用 LDAP Auth,填寫內容參考欄位配置說明,設定成功後,任何請求(不分服務、路由、用戶)皆需經過認證才能通過。

在服務端上啟用插件#

  1. 從網站左邊 Menu 中 服務 > 服務列表 頁面中,選擇要啟用此插件的服務,假設為google,點選對應的編輯按鈕:

服務啟用畫面1

  1. 在編輯畫面中,點選上方的 外掛插件 頁籤,再點選頁籤內容上方的 新增外掛插件 按鈕:

服務啟用畫面2

點選後,選擇 認證 頁籤,並啟用 LDAP Auth,填寫內容參考欄位配置說明,設定成功後,僅有此服務(範例為google)請求需經過認證才能通過。

在路由端上啟用插件#

可以由兩種方式來選擇路由,並啟用插件:

方式一:路由列表#

  1. 從網站左邊 Menu 中 服務 > 路由列表 頁面中,選擇要啟用此插件的路由,假設為 google,點選對應的編輯按鈕:

路由啟用畫面1

方式二:服務 > 服務列表 > 路由列表#

  1. 從網站左邊 Menu 中 服務 > 服務列表 頁面中,選擇要啟用此插件的路由 所屬之服務(假設為 google),點選對應的編輯按鈕。

在編輯畫面中,點選上方的 路由 頁籤,選擇要啟用此插件的路由(假設為 google),點選對應的編輯按鈕:

路由啟用畫面2


  1. 承第1步,點擊上述兩種方式之一的編輯按鈕後,在編輯畫面中,點選上方的 外掛插件 頁籤,再點選頁籤內容上方的 新增外掛插件 按鈕:

路由啟用畫面3

點選新增外掛插件 按鈕後,選擇 認證 頁籤,並啟用 LDAP Auth,填寫內容參考欄位配置說明,設定成功後,僅有此路由(範例為google)請求需經過認證才能通過。

驗證#

  1. 選擇一路由開啟此插件服務,填入 LDAP 伺服器相對應的資訊以及搜尋的資訊。

  2. 此時在 console 上送出以下指令:

$ curl -H 'x-api-host: google' <GOC API Gateway protocol>://<GOC API Gateway ip>:<GOC API Gateway proxy port>/index -i

會得到以下回應:

HTTP/1.1 401 Unauthorized
Date: Thu, 25 Mar 2021 09:54:08 GMT
Content-Type: application/json; charset=utf-8
Connection: keep-alive
WWW-Authenticate: Key realm="kong"
Content-Length: 41
X-Kong-Response-Latency: 3
Server: kong/2.0.4
{
"message":"Unauthorized"
}

代表插件正常運作,並阻擋未通過驗證之請求。

  1. 在送出的請求加上標頭 Proxy-Authorization 或是 Authorization ,以下是憑證格式:
credentials := [ldap | LDAP] base64(username:password)

標頭內容會如以下格式:

Authorization: ldap dGxibGVzc2luZzpLMG5nU3RyMG5n

將帶入驗證標頭的請求送出後即可得到正常的回應。

note

快取會暫存此憑證給未來的請求使用,維持的時間根據設定中的 cache_ttl 所決定。