OpenResty Edge 中配置 HTTP 基本认证,只需在 Admin 控制台创建一个基本认证用户组(可限定单个应用,也可全局共享),添加用户,再用「启用基本认证」页面规则动作在路由上开启。认证由网关服务器直接完成,发布配置后即推送到所有集群,无需重载、重启或二进制升级

本教程逐步演示应用级与全局两种配置,并用浏览器和 curl 验证,它是 OpenResty Edge 产品系列的一篇。

OpenResty Edge 中的 HTTP 基本认证

HTTP 基本认证是由网关服务器直接处理的。

示意图:HTTP 基本认证由 OpenResty Edge 网关服务器直接处理

为应用程序配置 HTTP 基本认证

像往常一样,让我们进入 OpenResty Edge 的 Admin Web 控制台。这是我们的控制台的样本部署。每个用户都有自己的本地部署。

OpenResty Edge Admin Web 控制台首页

让我们为我们的网关应用程序配置 HTTP 基本认证凭证。

我们可以继续使用之前的示例应用,test-edge.com。

OpenResty Edge 中 test-edge.com 域名的示例网关应用

进入这个应用程序。

在 OpenResty Edge 控制台进入 test-edge.com 应用

添加一个基本认证用户组

转到 HTTP 基本认证账号页面。

应用的 HTTP 基本认证账号页面

我们支持添加一个或多个基本认证用户组。每个用户组可以有一个或多个用户。

添加一个新的基本认证用户组。

添加一个新的基本认证用户组

输入组名“tutorial-group”。这个用户组只是为了演示这个教程。

输入基本认证用户组名 tutorial-group

保存。

保存新建的基本认证用户组

添加一个新的用户到这个组。

向 tutorial-group 组添加一个新的基本认证用户

点击这个按钮来添加。

点击按钮添加新的基本认证用户

键入用户名“Sam”。

输入基本认证用户名 Sam

输入密码。

输入基本认证用户密码

保存。

保存新建的基本认证用户

现在这个叫 “tutorial-group“ 的用户组中有了一个新用户。

tutorial-group 用户组中新增的用户 Sam

顺便说一下,我们可以去基本选项卡编辑用户组的设置。这里我们不作修改。

编辑基本认证用户组设置的基本选项卡

关闭这个页面。

关闭基本认证用户组页面

通过页面规则启用基本认证

转到页面规则页面,启用基本认证。

OpenResty Edge 应用中的页面规则页面

这个现有的页面规则已经设置了一个反向代理到一个预先定义的上游。我们在之前的教程中演示过这部分。

已设置反向代理到预定义上游的现有页面规则

让我们添加一个新的页面规则。

添加一条新的页面规则以启用基本认证

添加一个新的动作。

为页面规则添加一个新动作

输入“basic auth“进行搜索。

搜索基本认证页面规则动作

选择“启用基本认证”选项。

选择「启用基本认证」页面规则动作

选择我们刚刚创建的基本认证用户组。

为页面规则选择基本认证用户组

选择“app-tutorial-group”。

选择 app-tutorial-group 用户组

额外的“app-”前缀表示该用户组只用于当前的应用程序。而全局基本认证的用户组名称将得到额外的前缀“global-”。我稍后将会讲到全局 HTTP 基本认证的设置。

我们将这一规则设置为“置顶规则“,以确保这一规则总是被最先执行。你可以设置任何你想要的顺序。

将基本认证页面规则设为置顶规则

保存这个规则。

保存基本认证页面规则

像往常一样,我们需要发布来推送这个新改动。

发布新配置以推送该页面规则

点击这个按钮。

点击按钮开始配置发布

发布!

确认发布配置

改动现在已经同步到所有的网关服务器。

配置已完全同步到网关集群

现在,新的页面规则已经被推送到所有的网关集群和服务器。

新的页面规则已推送到所有网关集群和服务器

我们的配置变化不需要服务器重载、重启或二进制升级。所以它是非常有效和可扩展的。

配置变更无需服务器重载、重启或二进制升级即可生效

用浏览器和 curl 测试基本认证

让我们访问一下网关应用程序。我们可以看到,该页面触发了网络浏览器的认证对话框,而不是显示网页内容。

HTTP 基本认证触发的浏览器认证对话框

首先,尝试点击“取消”按钮。我们可以看到该页面变成了一个“401 未授权”的错误页面。

在浏览器认证对话框上点击取消

取消认证后出现的 401 未授权错误页面

刷新该页面。

刷新页面以重试基本认证

这一次,我们输入之前准备的正确的用户名和密码。

在认证对话框中输入正确的用户名和密码

现在我们可以访问该网页了。

通过 HTTP 基本认证后显示的网页内容

接下来,让我们用 curl 工具在命令行上测试 HTTP 基本认证设置。

在终端上,我们发送一个测试请求。

curl -sSI http://test-edge.com

在命令行用 curl 发送测试请求

我们可以看到响应是 401 Unauthorized。

curl 响应显示 401 Unauthorized

让我们这次用 “u“ 选项来指定基本认证凭证。

用 curl 的 -u 选项指定基本认证凭证

这里是用户的名字。

curl 基本认证凭证中的用户名

这里是明文密码。

curl 命令中以明文出现的密码

运行这个命令。

我们可以看到,现在的响应是 200 OK。我们通过了认证,服务器返回了最终的响应。

通过基本认证后 curl 响应显示 200 OK

跨所有应用配置全局 HTTP 基本认证

除了在 Edge 应用程序内部配置基本认证外,我们还可以在 Edge 的全局配置中进行配置。全局认证用户组对所有 Edge 应用程序都是可见的。

基本认证只是 OpenResty Edge 众多网关级安全动作之一。若需更强防护,你可以叠加内置验证码拦截机器人Web 应用防火墙,它们都通过同一套页面规则机制启用。

添加全局基本认证用户组

转到全局配置页面。

OpenResty Edge 控制台的全局配置页面

进入全局基本认证凭证页面。

全局基本认证凭证页面

点击这个按钮,添加一个新的基本认证用户组。

添加一个新的全局基本认证用户组

输入组的名称。

输入全局基本认证用户组名

保存。

保存新建的全局基本认证用户组

现在我们已经创建了一个新的全局基本认证用户组。

新创建的全局基本认证用户组

我们也可以点击编辑按钮添加新用户。

点击编辑按钮为全局组添加用户

现在点击这个按钮添加新用户。

点击按钮向全局组添加新用户

输入用户名 “Kelly“。

输入全局基本认证用户名 Kelly

输入密码。

输入全局基本认证用户密码

保存。

保存新建的全局基本认证用户

为应用配置全局基本认证

现在 “tutorial-global-group“ 用户组中有了一个新用户。让我们看看如何为我们的网关应用程序配置全局凭证。

tutorial-global-group 用户组中新增的用户 Kelly

关闭此页面。

关闭全局基本认证凭证页面

转到应用程序列表页。

OpenResty Edge 控制台的应用列表页面

搜索 test-edge.com 域名。

搜索 test-edge.com 域名

让我们进入这个应用程序。

进入 test-edge.com 应用

转到页面规则页面。

打开该应用的页面规则页面

编辑这个规则。

编辑该基本认证页面规则

点击下拉列表,切换用户组。

点击下拉列表切换基本认证用户组

我们可以在这里选择一个全局用户组。此修改被保存和发布后,该全局用户组中的用户凭证就会被使用。

为基本认证页面规则选择一个全局用户组

这就是我今天要讲的内容。

常见问题

如何在 OpenResty Edge 中启用 HTTP 基本认证?

创建一个基本认证用户组并添加用户,然后添加一条页面规则、选择「启用基本认证」动作并指定该用户组。发布配置,把规则推送到网关服务器。此后受保护的路由会返回 401,直到提供有效的用户名和密码。

修改基本认证需要重载或重启网关吗?

不需要。发布配置会把新的页面规则推送到所有网关集群和服务器,无需任何重载、重启或二进制升级,因此即便在大规模场景下改动也能高效生效。

如何用 curl 测试 HTTP 基本认证?

发送一个普通请求 curl -sSI http://test-edge.com,会得到 401 Unauthorized。用 -u 选项带上凭证——curl -sSI -u Sam:PASSWORD http://test-edge.com——用户名和密码正确时会返回 200 OK

启用基本认证后为什么会出现「401 Unauthorized」?

在未提供凭证或凭证错误时,这是预期行为。浏览器会弹出认证对话框,点击取消即渲染 401 页面;输入你在用户组中配置的用户名和密码即可通过。

关于 OpenResty Edge

OpenResty Edge 是一款专为微服务和分布式流量架构设计的全能型网关软件,由我们自主研发。它集流量管理、私有 CDN 构建、API 网关、安全防护等功能于一体,帮助您轻松构建、管理和保护现代应用程序。OpenResty Edge 拥有业界领先的性能和可扩展性,能够满足高并发、高负载场景下的苛刻需求。它支持调度 K8s 等容器应用流量,并可管理海量域名,轻松满足大型网站和复杂应用的需求。

如果你喜欢这个教程,请订阅这个博客网站和我们的 YouTube 频道B 站频道。谢谢!

关于作者

章亦春是开源 OpenResty® 项目创始人兼 OpenResty Inc. 公司 CEO 和创始人。

章亦春(Github ID: agentzh),生于中国江苏,现定居美国湾区。他是中国早期开源技术和文化的倡导者和领军人物,曾供职于多家国际知名的高科技企业,如 Cloudflare、雅虎、阿里巴巴, 是 “边缘计算“、”动态追踪 “和 “机器编程 “的先驱,拥有超过 22 年的编程及 16 年的开源经验。作为拥有超过 4000 万全球域名用户的开源项目的领导者。他基于其 OpenResty® 开源项目打造的高科技企业 OpenResty Inc. 位于美国硅谷中心。其主打的两个产品 OpenResty XRay(利用动态追踪技术的非侵入式的故障剖析和排除工具)和 OpenResty Edge(最适合微服务和分布式流量的全能型网关软件),广受全球众多上市及大型企业青睐。在 OpenResty 以外,章亦春为多个开源项目贡献了累计超过百万行代码,其中包括,Linux 内核、Nginx、LuaJITGDBSystemTapLLVM、Perl 等,并编写过 60 多个开源软件库。

关注我们

如果您喜欢本文,欢迎关注我们 OpenResty Inc. 公司的博客网站 。也欢迎扫码关注我们的微信公众号:

我们的微信公众号

翻译

我们提供了英文版原文和中译版(本文) 。我们也欢迎读者提供其他语言的翻译版本,只要是全文翻译不带省略,我们都将会考虑采用,非常感谢!