返回

如何在 Kong 中使用插件添加自定义身份验证

后端

Kong 是一款开源的 API 网关,可让您轻松管理和保护您的 API。Kong 具有高度的可扩展性,您可以通过插件来扩展其功能。插件是一种独立的软件组件,可以添加到 Kong 中以提供新功能或增强现有功能。

在本文中,我们将向您展示如何使用插件为 Kong 添加自定义身份验证。这将允许您使用自己的身份验证机制来保护您的 API,例如使用数据库或 LDAP。

前提条件

在继续本教程之前,您需要确保已经满足以下先决条件:

  • 已安装并运行 Kong。
  • 已安装并运行 Kong 管理 API。
  • 已安装 Lua 解释器。
  • 熟悉 Lua 编程语言。

步骤 1:创建插件目录

首先,您需要创建一个目录来存储您的插件文件。在这个目录中,您将创建一个名为 auth-custom.lua 的文件,这是您的插件的主文件。

mkdir ~/kong-plugins
cd ~/kong-plugins

步骤 2:编写插件文件

接下来,您需要编写插件文件 auth-custom.lua。在这个文件中,您将定义插件的名称、版本和一些其他元数据。您还将定义插件的处理程序函数,该函数将在请求到达 Kong 时被调用。

-- 定义插件的元数据
local plugin = {
  name = "auth-custom",
  version = "1.0.0",
  priority = 0
}

-- 定义插件的处理程序函数
function plugin.access(kong)
  -- 从请求中获取认证头
  local auth_header = kong.request.get_header("Authorization")

  -- 检查认证头是否有效
  if not auth_header or auth_header == "" then
    return kong.response.error(401, "Unauthorized")
  end

  -- 从认证头中提取凭据
  local credentials = string.match(auth_header, "Basic (.+)")

  -- 解码凭据
  local decoded_credentials = base64.decode(credentials)

  -- 分割凭据为用户名和密码
  local username, password = string.split(decoded_credentials, ":")

  -- 检查用户名和密码是否正确
  if username == "admin" and password == "password" then
    return kong.response.continue()
  else
    return kong.response.error(401, "Unauthorized")
  end
end

return plugin

步骤 3:将插件加载到 Kong

现在您已经创建了插件文件,您需要将其加载到 Kong 中。您可以使用 Kong 管理 API 来做到这一点。

curl -X POST http://localhost:8001/plugins \
  -H "Content-Type: application/json" \
  -d @~/kong-plugins/auth-custom.lua

步骤 4:在 Kong 中使用插件

您已经成功地将插件加载到 Kong 中,现在您需要在 Kong 中使用它。您可以通过在 Kong 配置文件中添加一个插件块来做到这一点。

server {
  listen 8000;
  server_name example.com;

  location / {
    auth_request /auth-custom;
    proxy_pass http://backend:8080;
  }
}

现在,当您访问您的 API 时,您将被要求提供用户名和密码。如果凭据正确,您将被允许访问 API。否则,您将收到 401 Unauthorized 错误。

结论

在本文中,我们向您展示了如何使用插件为 Kong 添加自定义身份验证。这将允许您使用自己的身份验证机制来保护您的 API。您可以使用这个插件来保护您的 API 免受未经授权的访问。