
Kong入門指南
目錄
1. 總覽
2. 准備管理Kong Gateway
3. 通過Kong Gateway公開您的服務
4. 保護您的服務
5. 通過代理緩存提高性能
6. 使用身份驗證保護服務
7. 設置智能負載平衡
在本主題中,您將了解API網關身份驗證,設置密鑰身份驗證插件以及添加使用者。
如果您根據入門指南學習,請確保已完成“Kong入門指南 - 通過代理緩存提高性能 ”。
什么是身份驗證?
API網關身份驗證是控制允許使用您的API傳輸的數據的重要方法。基本上,它使用一組預定義的憑據來檢查特定使用者是否有權訪問API。
Kong Gateway有一個插件庫,這些插件提供了實現API網關身份驗證的最廣為人知和使用最廣泛的方法的簡單方法。以下是一些常用的:
- 基本認證
- 密鑰認證
- OAuth 2.0身份驗證
- LDAP認證高級
- OpenID連接
身份驗證插件可以配置為應用於Kong Gateway內的服務實體。反過來,服務實體與它們表示的上游服務是一對一映射的,從本質上講意味着認證插件直接應用於那些上游服務。
為什么要使用API網關身份驗證?
啟用身份驗證后,除非客戶端首先成功進行身份驗證,否則Kong Gateway不會代理請求。這意味着上游(API)不需要對客戶端請求進行身份驗證,也不會浪費用於驗證憑據的關鍵資源。
Kong Gateway可以查看所有身份驗證嘗試(成功,失敗等等),從而可以對這些事件進行分類和控制,以證明適當的控制措施已經存在並實現合規性。身份驗證還使您有機會確定如何處理失敗的請求。這可能意味着僅阻止請求並返回錯誤代碼,或者在某些情況下,您可能仍希望提供有限的訪問權限。
在此示例中,您將啟用密鑰驗證插件。API密鑰身份驗證是進行API身份驗證的最流行的方法之一,可以實現以根據需要創建和刪除訪問密鑰。
有關更多信息,請參見什么是API網關身份驗證?。
設置密鑰認證插件
1.在端口上調用Admin API 8001並配置插件以啟用密鑰身份驗證。對於此示例,將插件應用於您創建的/ mock路由。
使用cURL:
$ curl -X POST http://<admin-hostname>:8001/routes/mocking/plugins \
--data name=key-auth
- 嘗試再次訪問該服務:
使用cURL:
$ curl -i http://<admin-hostname>:8000/mock
由於添加了密鑰認證,因此您將無法訪問它:
HTTP/1.1 401 Unauthorized
...
{
"message": "No API key found in request"
}
在Kong代理請求此路由之前,它需要一個API密鑰。對於此示例,由於安裝了密鑰身份驗證插件,因此需要首先創建具有關聯密鑰的使用者。
設置使用者和憑證
- 要創建使用者,請調用Admin API和使用者的端點。下面創建了一個新的消費者,稱為Consumer。
使用cURL:
$ curl -i -X POST -d "username=consumer&custom_id=consumer" http://<admin-hostname>:8001/consumers/
- 設置后,調用Admin API為上面創建的使用者設置密鑰。對於此示例,將密鑰設置為apikey。如果未輸入任何密鑰,則Kong將自動生成密鑰。
使用cURL:
$ curl -i -X POST http://<admin-hostname>:8001/consumers/consumer/key-auth -d 'key=apikey'
結果:
HTTP/1.1 201 Created
...
{
"consumer": {
"id": "2c43c08b-ba6d-444a-8687-3394bb215350"
},
"created_at": 1568255693,
"id": "86d283dd-27ee-473c-9a1d-a567c6a76d8e",
"key": "apikey"
}
現在,您已經為使用者提供了API密鑰,以訪問該路由。
驗證密鑰驗證
要驗證密鑰身份驗證插件,請使用密鑰值為的標頭再次訪問模擬路由。apikeyapikey
使用cURL:
$ curl -i http://<admin-hostname>:8000/mock/request -H 'apikey:apikey'
您應該得到一條HTTP/1.1 200 OK消息作為回應。
(可選)禁用插件
如果您按照主題逐個遵循此入門指南,則在以后的所有請求中都需要使用此API密鑰。如果您不想一直指定密鑰,請在繼續操作之前禁用插件。
- 找到插件ID並復制。
使用cURL:
$ curl -X GET http://<admin-hostname>:8001/routes/mocking/plugins/
輸出:
"id": "2512e48d9-7by0-674c-84b7-00606792f96b"
- 禁用插件。
使用cURL:
$ curl -X PATCH http://<admin-hostname>:8001/routes/mocking/plugins/{<plugin-id>} \
--data "enabled=false"