首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Nginx/Lua检测HTTP基本用户/密码标头并将其重写为自定义标头

用Nginx/Lua检测HTTP基本用户/密码标头并将其重写为自定义标头
EN

Stack Overflow用户
提问于 2014-02-12 15:10:32
回答 1查看 3.2K关注 0票数 3

我正在使用一个历史性API,该API通过密钥/秘密组合授予访问权限,最初指定的API设计器应该在报头中将其作为用户名和密码传递,例如:

代码语言:javascript
复制
curl -u api_key:api_secret http://api.example.com/....

现在,我们的API客户端将不断增长,我们希望使用3标度来处理身份验证、速率限制和其他功能。根据3 3scale的指示和建议,我们将在我们的API服务器前使用一个Nginx代理,它根据3 3scale的服务进行身份验证,以处理所有的访问控制系统。

我们将把现有客户端的密钥和秘密导出到3 3scale中,并保持这两个系统保持同步。我们需要我们现有的应用程序继续以现有的方式接收密钥&秘密,因为一些返回的数据是特定于客户的。但是,我需要找到一种方法,将3 3scale作为身份验证方法不支持的HTTP请求转换为重写的自定义标头。

我已经能够使用Nginx和Lua设置代理,3 3scale为您配置。这允许将-u key:secret传递到我们的服务器,并正确处理。不过,目前我还需要添加与查询参数或自定义头相同的身份验证信息,以便3 3scale能够管理访问。我希望我的Nginx代理能够为我处理这个问题,这样用户就可以以预先存在的方式提供一组auth细节,3 3scale也可以获取它。

在我所知道的一种语言中,例如Ruby,我可以对HTTP_AUTHORIZATION头进行解码,选择have 64编码的部分,并对其进行解码,以找到已经提供的密钥&秘密组件。但我是Nginx新手,不知道如何在Nginx中实现同样的目标(我也不知道3 3scale提供的Lua脚本是否是解决方案的一部分).

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-17 13:37:14

可以通过Nginx配置文件中的一个小调整来支持重用3 3scale密钥的HTTP授权头。正如您正确地指出的,您下载的Lua脚本就是这样做的地方。

但是,对于导入到3 3scale的键,我建议采用一种稍微不同的方法。与使用app_id/app_key身份验证模式不同,您可以使用user_key模式(这是一个单一密钥)。然后,您将为每个应用程序导入到3 3scale的是base64字符串的api_key+api_secret之和。

这样,您需要对配置文件所做的更改就会更少、更简单。

您需要遵循的步骤如下:

  • 在3 3scale管理门户中,将身份验证模式设置为API密钥(https://support.3scale.net/howtos/api-configuration/authentication-patterns)。
  • 转到代理配置屏幕(在那里设置API后端、映射和下载Nginx文件)。
  • 在“身份验证设置”下,将凭据的位置设置为HTTP标头。
  • 下载Nginx配置文件并打开Lua脚本
  • 查找以下行(应位于文件末尾):

local parameters = get_auth_params("headers", string.split(ngx.var.request, " ")[1] )

  • 代之以:

local parameters = get_auth_params("basicauth", string.split(ngx.var.request, " ")[1] )

我希望这种方法适合你的需要。如果您需要更多帮助,也可以在support@3scale.net联系。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21731739

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档