使用Nginx/Lua检测并将HTTP基本用户名/密码头重写为自定义头。
2014-2-12 15:10:32
收藏:0
阅读:172
评论:1
我正在使用一个历史悠久的 API 工作,该 API 通过密钥/秘密组合授权访问,原始 API 设计者指定应将其作为 HTTP 基本身份验证标题中的用户名和密码传递,例如:
curl -u api_key:api_secret http://api.example.com/....
现在我们的 API 客户端基数将会增长,我们计划使用 3scale 处理身份验证、速率限制和其他函数。根据 3scale 的指示和建议,我们将在 API 服务器前面使用一个基于 Nginx 的代理,该代理通过身份验证 3scale 的服务来处理所有的访问控制系统。
我们将导出我们现有客户的密钥和密码到 3scale 中,并保持两个系统同步。我们需要我们现有的应用程序继续以现有方式接收密钥和密码,因为某些返回的数据是特定于客户端的。但是,我需要找到一种将 HTTP 基本身份验证请求转换为重写的自定义标头的方法,因为 3scale 不支持它作为身份验证方法。
我已经能够使用 3scale 为您配置的 Nginx 和 Lua 配置设置代理。这允许 -u key:secret 通过到达我们的服务器,并被正确处理。但是,目前,我需要另外添加相同的身份验证信息作为查询参数或自定义标头,以便 3scale 可以管理访问。我希望我的 Nginx 代理可以为我处理这个问题,以便用户以预先存在的方式提供一组身份验证详细信息,而 3scale 也可以接收它们。
在我熟悉的语言中,例如 Ruby,我可以解码 HTTP_AUTHORIZATION 标头,挑选出 Base64 编码的部分,并对其进行解码,以查找已提供的密钥和密码组件。但是我是一个 Nginx 新手,并不知道如何在 Nginx 中实现相同的功能(我也不知道 3scale 提供的 Lua 脚本是否会成为解决方案的一部分)...
点赞
评论区的留言会收到邮件通知哦~
推荐文章
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
将 HTTP 授权头再次利用于 3scale 密钥可以通过更改 Nginx 配置文件来支持。正如您指出的那样,您下载的Lua脚本就是要这样做的地方。
但是,我建议在导入到 3scale 的密钥方面采用略微不同的方法。您可以使用 user_key 模式(即单个密钥),而不是使用 app_id/app_key 认证模式。然后,您将导入到每个应用程序的 3scale 中的是结合了 api_key+api_secret 的 base64 字符串。
这样,您需要对配置文件进行的更改将更少且更简单。
您需要遵循的步骤是:
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 联系我们。