apisix~key-auth多消費的使(shi)用(yong)
在 APISIX 中使用 key-auth 插件實現基于(yu)密鑰的認證,以(yi)下是(shi)詳細的配(pei)置步(bu)驟,包括如何(he)保(bao)存密鑰和(he)證書,以(yi)及如何(he)將這些信息分配(pei)給客(ke)戶端 A 和(he) B。
場景說明
- 服務 C 是后端服務,需要通過 APISIX 代理。
- 客戶端 A 和 B 需要唯一的密鑰(
key)來訪問服務 C。 - APISIX 使用
key-auth插件對請求進行身份驗證。
步驟 1:生成密鑰和證書
雖然你提到了證書,但 key-auth 插件本身并不直接處理證書,而是基于預定義的密鑰(key)進行認證。通常,你只需為每個客戶端生成一(yi)個唯一(yi)的(de)密鑰即可(ke)。
為客戶端 A 和 B 生成密鑰:
# 為客戶端 A 生成密鑰
echo "client-a-key" > client_a.key
# 為客戶端 B 生成密鑰
echo "client-b-key" > client_b.key
步驟 2:配置 APISIX 的消費者(Consumer)
APISIX 的 Consumer 實體(ti)用于(yu)管理(li)不同的(de)客戶端(duan)及其認證信息(xi)。我們(men)需要為(wei)客戶端(duan) A 和(he) B 各創建(jian)一個消費(fei)者,并為(wei)每個消費(fei)者綁定一個唯一的(de)密鑰(yao)。
配置消費者 A:
通(tong)過 APISIX 的 Admin API 創建消費者(zhe) A:
curl -X PUT //{APISIX_ADMIN_API}/apisix/admin/consumers/client-a \
-H 'Content-Type: application/json' \
-d '{
"username": "client-a",
"plugins": {
"key-auth": {
"key": "client-a-key"
}
}
}'
配置消費者 B:
通(tong)過 APISIX 的 Admin API 創建消(xiao)費者 B:
curl -X PUT //{APISIX_ADMIN_API}/apisix/admin/consumers/client-b \
-H 'Content-Type: application/json' \
-d '{
"username": "client-b",
"plugins": {
"key-auth": {
"key": "client-b-key"
}
}
}'
步驟 3:配置路由并啟用 key-auth 插件
現在需要為服務 C 配置路由,并啟用 key-auth 插件(jian)以保護該路由(you)。
配置路由:
通(tong)過 Admin API 創建(jian)路(lu)由:
curl -X PUT //{APISIX_ADMIN_API}/apisix/admin/routes/1 \
-H 'Content-Type: application/json' \
-d '{
"uri": "/service-c/*",
"upstream": {
"type": "roundrobin",
"nodes": {
"//backend-service-c:80": 1
}
},
"plugins": {
"key-auth": {}
}
}'
uri:/service-c/*表示匹配所有以/service-c/開頭的請求路徑。upstream: 指向后端服務 C 的地址。plugins.key-auth: 啟用key-auth插件。
步驟 4:客戶端調用服務
客戶端 A 和(he) B 在調用服務時需要(yao)攜(xie)帶各自的密(mi)(mi)鑰作為身(shen)份驗(yan)證憑據。密(mi)(mi)鑰應放在 HTTP 請求頭中。
客戶端 A 調用服務:
curl -X GET //{APISIX_GATEWAY}/service-c/resource \
-H "apikey: client-a-key"
客戶端 B 調用服務:
curl -X GET //{APISIX_GATEWAY}/service-c/resource \
-H "apikey: client-b-key"
apikey: HTTP 請求頭中的鍵名,默認是apikey,也可以通過插件配置修改。
apikey如果錯誤,返回401

步驟 5:密鑰的管理和分發
- 私鑰和證書的存儲:如果你需要更高的安全性,可以將密鑰存儲在安全的地方,例如加密存儲或者環境變量中。
- 分發密鑰:
- 將密鑰(如
client-a-key和client-b-key)分發給客戶端 A 和 B。 - 不要將私鑰泄露給其他未授權的客戶端。
- 如果需要更高的安全性,可以定期輪換密鑰。
- 將密鑰(如
總結
通過上述配置:
- 后端服務 C 被路由
/service-c/*所代理。 - 只有持有正確密鑰的客戶端(A 或 B)才能訪問服務 C。
- 密鑰通過
key-auth插件進行驗證,密鑰存儲在 APISIX 的消費者配置中。
4