Skip to main content
Version: Next

Basic Authentication

用途說明#

可於服務或路由加上基礎驗證,在傳送請求時帶上Proxy-AuthorizationAuthorization 標頭,內容為設定設定之使用者名稱及密碼。

欄位配置說明#

變數類型預設值說明必填
hide_credentialsbooleanfalse此欄位決定將請求往後送至服務時是否帶上原本的驗證標頭內容。設定為true時,插件會把驗證內容自請求移除。
anonymousstring可設定"anonymous"使用者在驗證失敗時會使用此身份驗證。如此欄位為空,則請求之標頭沒帶上Authorization時會收到authentication failure 4xx的回應。要注意的是,此欄位需填入的是consumer本身之id,而不是custom_id。

用法示例#

在全局啟用插件#

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

全局啟用畫面

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

在服務端上啟用插件#

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

服務啟用畫面1

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

服務啟用畫面2

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

在路由端上啟用插件#

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

方式一:路由列表#

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

路由啟用畫面1

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

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

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

路由啟用畫面2


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

路由啟用畫面3

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

建立使用者及憑證#

  1. 從網站左邊Menu中 訂閱用戶 > 用戶列表 頁面中選擇右上方 新增 按鈕,新增用戶。

  2. 選擇剛建立的使用者,進入編輯頁面,選擇上方 憑證 頁籤,然後選擇左邊 Basic Authentication 頁籤,再選擇列表左上方的 新增 按鈕。

basic auth

  1. 填入代表此用戶的用戶名稱及密碼並送出,在此填入 Testtesting 做為範例。

basic auth2

驗證#

  1. 選擇一路由開啟此插件服務,並建立好使用者及憑證 (範例為將路由之域名設定為 google,路徑設定為 /index,並開啟 拆分路徑)。

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

$ curl -H 'x-api-host: google' http://localhost:8000/index -i

會得到以下回應

HTTP/1.1 401 Unauthorized
Date: Thu, 25 Mar 2021 07:56:13 GMT
Content-Type: application/json; charset=utf-8
Connection: keep-alive
WWW-Authenticate: Basic realm="kong"
Content-Length: 26
X-Kong-Response-Latency: 1
Server: kong/2.0.4
{"message":"Unauthorized"}

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

  1. 如果代入 Authorization 之標頭,並把剛剛建立的用戶名稱及密碼 (Test:testing) 經過 Base64 格式做encode,可得到 VGVzdDp0ZXN0aW5n

此時送出以下指令

$ curl -H 'x-api-host: google' -H 'Authorization: Basic VGVzdDp0ZXN0aW5n' http://localhost:8000/index -i

即可得到正常的回應。