操作场景
本文介绍如何在 Kong 云原生 API 网关上通过 Key Authentication 密钥身份认证插件实现认证访问。
前置条件
已购买 Kong 网关实例,详情请参见 操作文档。
配置了后端(Service)以及路由(Route)。
操作步骤
本场景操作步骤以配置 Route 插件为例,指导如何实现密钥身份认证访问。
步骤一:配置 Key Authentication 密钥身份认证插件
1. 登录 TSE 控制台,进入需要配置限流插件的 Kong 网关实例详情页,在 Konga 控制台页面查看管理控制台登录方式。
2. 登录 Konga 管理控制台,进入需要密钥身份认证访问的 Route 详情页,单击 Add Plugin 添加插件。
3. 在插件市场的 Authentication 分组中选择 Key Auth 插件,单击 Add Plugin。
4. 设置密钥身份认证插件参数,并保存。
key names
:插件将要查找键的参数名称数组(默认为 apikey)。客户端必须以其中一个密钥名称发送身份验证密钥,插件将尝试从 header 或具有相同名称的查询参数读取凭据。注意
键名只能包含[a-z],[A-Z],[0-9],[_]和[-]。 由于 NGINX 默认值中的附加限制,不允许在标题中使用下划线。
hide credentials
:是否隐藏来自上游服务的凭据。anonymous
:如果身份验证失败,则用作“匿名”使用者的可选字符串(使用者 uuid)值。如果为空(默认),则请求将失败,并且身份验证失败4xx。 请注意,此值必须引用 Kong 内部的 Consumer id 属性,而不是其 custom_id。key in header
:如果启用,插件将要查找键的参数放在 header。key in query
:如果启用,插件将要查找键的参数放在 query。key in body
:如果启用,插件将读取请求正文(如果所述请求有一个并且支持其MIME类型)并尝试在其中找到密钥。支持的 MIME 类型是 application/www-form-urlencoded,application/json 和 multipart/form-data。run on preflight
:插件是否应在 OPTIONS 预检请求上运行。
5. 返回 route 页面,确定该 route 已经绑定的创建的插件。
步骤二:创建 Consumer
1. 进入 CONSUMERS 页面创建 Consumer。
username
:用户(应用)名,必须指定此字段或 custom_id。custom_id
:用于将使用者映射到另一个数据库的自定义标识符。必须指定此字段或username。Tags
:标签。
2. 为 Consumer 创建 api key 凭证。
key
:key 值,默认为空会自动生成 key。
3. 查看生成的 key。
步骤三:发起 API 请求
1. 未携带 apikey 会返回报错:
curl http://kong:8000/{proxy path}/
。HTTP/1.1 401 UnauthorizedServer:Date: Mon, 25 Apr 2022 14:16:10 GMTContent-Type: application/json; charset=utf-8Content-Length: 45Connection: keep-aliveWWW-Authenticate: Key realm="kong"X-Kong-Response-Latency: 1{"message":"No API key found in request"}
2. 正确携带 apikey 则放通请求:
curl http://kong:8000/{proxy path}?apikey=<some_key>
。HTTP/1.1 200 OKServer:Date: Mon, 25 Apr 2022 14:19:19 GMTContent-Type: text/html; charset=UTF-8Content-Length: 6Connection: keep-aliveX-Kong-Upstream-Latency: 5X-Kong-Proxy-Latency: 0Via: kong/2.4.1ok
注意事项
Key Auth 不支持针对不同 consumer 使用不同的 Api Key,如需针对单个用户进行 Key Auth 认证,需配合 post function 插件一起使用,自定义增加识别用户 ID 的处理逻辑。