Apache APISIX 入门教程:Key Authentication 密钥认证详解
前言
在现代 API 网关架构中,安全认证是保护后端服务的第一道防线。Apache APISIX 作为高性能 API 网关,提供了多种认证机制。本文将深入讲解其中最基础也最常用的 Key Authentication(密钥认证)方式。
什么是密钥认证
密钥认证是一种基于 API Key 的简单认证机制,其工作原理如下:
- 管理员在路由上配置密钥认证插件
- 为每个消费者(Consumer)分配唯一的 API Key
- 客户端在请求头或查询参数中携带该 Key
- APISIX 网关验证 Key 的有效性
这种认证方式特别适合机器对机器(M2M)的 API 通信场景。
核心概念解析
Consumer(消费者)
在 APISIX 中,Consumer 代表 API 的使用者,可以是:
- 移动应用程序
- Web 前端
- 第三方服务
- 开发者账号
每个 Consumer 需要:
- 唯一的用户名(username)
- 至少启用一个认证插件
Key Auth 插件
key-auth
插件是 APISIX 内置的认证插件之一,主要特性包括:
- 支持 header 和 query string 两种传递方式
- 可自定义 API Key 的字段名称
- 可与其它插件组合使用
实战配置指南
前置准备
- 已完成 APISIX 的安装部署
- 已创建基本路由(参考路由配置教程)
步骤一:创建 Consumer
我们创建一个名为 "tom" 的消费者,并为其分配 API Key:
curl -i "http://127.0.0.1:9180/apisix/admin/consumers" -X PUT -d '
{
"username": "tom",
"plugins": {
"key-auth": {
"key": "secret-key" # 实际生产环境请使用更复杂的密钥
}
}
}'
成功创建将返回 HTTP/1.1 201 Created
。
安全提示:生产环境务必使用高强度随机密钥,避免使用简单字符串。
步骤二:启用路由认证
为现有路由启用密钥认证:
curl -i "http://127.0.0.1:9180/apisix/admin/routes/getting-started-ip" -X PATCH -d '
{
"plugins": {
"key-auth": {}
}
}'
步骤三:验证认证效果
测试场景 1:无密钥请求
curl -i "http://127.0.0.1:9080/ip"
预期返回 401 Unauthorized
,因为未提供认证凭证。
测试场景 2:错误密钥请求
curl -i "http://127.0.0.1:9080/ip" -H 'apikey: wrong-key'
同样返回 401
,因为密钥不匹配。
测试场景 3:正确密钥请求
curl -i "http://127.0.0.1:9080/ip" -H 'apikey: secret-key'
成功返回 200 OK
和预期响应内容。
高级配置选项
key-auth
插件支持多种自定义配置:
{
"key-auth": {
"key": "your-key",
"header": "x-custom-key", // 自定义 header 字段
"query": "api_key" // 自定义 query 参数名
}
}
禁用认证功能
当需要临时关闭认证时,可以通过以下方式:
curl "http://127.0.0.1:9180/apisix/admin/routes/getting-started-ip" -X PATCH -d '
{
"plugins": {
"key-auth": {
"_meta": {
"disable": true
}
}
}
}'
生产环境建议
- 密钥管理:建议使用密钥管理系统定期轮换 API Key
- HTTPS:务必启用 HTTPS 加密传输,防止密钥泄露
- 日志审计:记录认证日志用于安全审计
- 结合其他插件:可与限流、IP 限制等插件配合使用
常见问题解答
Q:密钥泄露怎么办? A:立即在 Admin API 中更新 Consumer 的密钥,并调查泄露原因。
Q:能否一个 Consumer 配置多个 Key? A:原生不支持,但可以通过创建多个 Consumer 或自定义插件实现。
Q:如何批量管理大量 Consumer? A:建议通过 CI/CD 流程或配置管理系统自动化管理。
总结
Key Authentication 作为 APISIX 最基础的认证方式,虽然简单但非常实用。通过本文的详细讲解,您应该已经掌握了密钥认证的核心原理和配置方法。在实际应用中,可以根据业务需求选择更复杂的认证方式,或组合多种安全机制构建纵深防御体系。
下一步建议:学习如何配置 Rate Limiting 限流插件,完善 API 的安全防护体系。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考