跳到主要内容

密钥认证

API 网关的主要作用是连接 API 消费者和提供者。出于安全原因,在允许消费者访问上游资源之前,它应该对消费者进行身份验证和授权。

Key Authentication

APISIX 具有灵活的插件扩展系统,并拥有许多用于用户身份验证和授权的现有插件。例如:

在本教程中,你将创建一个消费者,使用密钥认证配置其凭证,并学习如何启用和禁用密钥认证。

关键概念

消费者

消费者 是指使用 API 的应用程序或开发者。

在 APISIX 中,创建消费者需要一个唯一的 username。作为密钥认证配置的一部分,你还需要将上述列表中的身份验证插件之一添加到消费者的 plugin 字段中。

密钥认证

密钥认证是一种相对简单但广泛使用的身份验证方法。其思路如下:

  1. 管理员将身份验证插件添加到路由。
  2. API 消费者在发送请求时,将密钥附加到查询字符串或请求头中以进行身份验证。

前置条件

  1. 完成 安装 APISIX 以在 Docker 或 Kubernetes 中安装 APISIX。
  2. 完成 配置路由
  3. 如果使用这些工具,请安装 ADCAPISIX-MCP

配置密钥认证

创建消费者

创建消费者 tom

警告

请在生产环境中使用复杂的密钥。

curl -i "http://127.0.0.1:9180/apisix/admin/consumers" -X PUT -d '
{
"username": "tom"
}'

如果消费者创建成功,你将收到 HTTP/1.1 201 Created 响应。

配置消费者凭证

tom 配置 key-auth 凭证:

curl "http://127.0.0.1:9180/apisix/admin/consumers/tom/credentials" -X PUT -d '
{
"id": "cred-tom-key-auth",
"plugins": {
"key-auth": {
"key": "secret-key"
}
}
}'

如果消费者凭证创建成功,你将收到 HTTP/1.1 201 Created 响应。

启用身份验证

更新 配置路由 中的 getting-started-ip 路由以添加 key-auth 插件:

curl -i "http://127.0.0.1:9180/apisix/admin/routes/getting-started-ip" -X PATCH -d '
{
"plugins": {
"key-auth": {}
}
}'

如果路由更新成功,你将收到 HTTP/1.1 200 OK 响应。

验证

你将在本节中验证密钥认证是否已成功启用。

发送不带任何密钥的请求

发送不带 apikey 头的请求。

curl -i "http://127.0.0.1:9080/ip"

由于未提供密钥,你将收到未授权的 HTTP/1.1 401 Unauthorized 响应。

发送带有错误密钥的请求

发送在 apikey 头中带有错误密钥的请求。

curl -i "http://127.0.0.1:9080/ip" -H 'apikey: wrong-key'

由于密钥不正确,你将收到 HTTP/1.1 401 Unauthorized 响应。

发送带有正确密钥的请求

发送在 apikey 头中带有正确密钥的请求。

curl -i "http://127.0.0.1:9080/ip" -H 'apikey: secret-key'

由于提供了正确的密钥,你将收到 HTTP/1.1 200 OK 响应。

禁用身份验证

通过将 _meta.disable 参数设置为 true 来禁用密钥认证插件。

curl "http://127.0.0.1:9180/apisix/admin/routes/getting-started-ip" -X PATCH -d '
{
"plugins": {
"key-auth": {
"_meta": {
"disable": true
}
}
}
}'

发送不带任何密钥的请求以进行验证:

curl -i "http://127.0.0.1:9080/ip"

由于密钥认证已禁用,你将收到 HTTP/1.1 200 OK 响应。

下一步

你已经学习了如何为路由配置密钥认证。在下一个教程中,你将学习如何配置限流限速。