key-auth
key-auth 插件支持使用身份验证密钥作为客户端在访问上游资源之前进行自我身份验证的机制。
要使用该插件,你需要在 消费者 (Consumers) 上配置身份验证密钥,并在路由或服务上启用该插件。密钥可以包含在请求 URL 查询字符串或请求 Header 中。APISIX 将验证密钥以确定是否允许请求访问上游资源。
当 消费者成功通过认证后,APISIX 会在将请求代理到上游服务之前,向请求中添加额外的 Header,例如 X-Consumer-Username、X-Credential-Identifier,如果配置了消费者自定义 Header,也会一并添加。上游服务可以据此区分消费者并执行额外的逻辑。如果这些值不可用,则不会添加相应的 Header。
示例
以下示例展示了如何在不同场景下使用 key-auth 插件。
在路由上实现密钥认证
以下示例展示了如何在路由上实现密钥认证,并将密钥包含在请求 Header 中。
创建一个消费者 jack:
curl "http://127.0.0.1:9180/apisix/admin/consumers" -X PUT \
-H "X-API-KEY: ${ADMIN_API_KEY}" \
-d '{
"username": "jack"
}'
为该消费者创建 key-auth 凭证:
curl "http://127.0.0.1:9180/apisix/admin/consumers/jack/credentials" -X PUT \
-H "X-API-KEY: ${ADMIN_API_KEY}" \
-d '{
"id": "cred-jack-key-auth",
"plugins": {
"key-auth": {
"key": "jack-key"
}
}
}'
创建一个启用 key-auth 的路由:
curl "http://127.0.0.1:9180/apisix/admin/routes" -X PUT \
-H "X-API-KEY: ${ADMIN_API_KEY}" \
-d '{
"id": "key-auth-route",
"uri": "/anything",
"plugins": {
"key-auth": {}
},
"upstream": {
"type": "roundrobin",
"nodes": {
"httpbin.org:80": 1
}
}
}'
使用有效密钥进行验证
使用有效密钥发送请求:
curl -i "http://127.0.0.1:9080/anything" -H 'apikey: jack-key'
你应该会收到 HTTP/1.1 200 OK 响应。
使用无效密钥进行验证
使用无效密钥发送请求:
curl -i "http://127.0.0.1:9080/anything" -H 'apikey: wrong-key'
你应该会看到包含以下内容的 HTTP/1.1 401 Unauthorized 响应:
{"message":"Invalid API key in request"}
未提供密钥进行验证
未提供密钥发送请求:
curl -i "http://127.0.0.1:9080/anything"
你应该会看到包含以下内容的 HTTP/1.1 401 Unauthorized 响应:
{"message":"Missing API key found in request"}