我正在做一个概念证明来演示我们如何在堆栈中实现3scale.在一个示例中,我想做一些POST 请求主体操作来创建API外观,该外观将可能是旧API格式的内容映射到新的内部API格式.例如.改变像
{ "foo" : "bar" , "deprecated" : true }
Run Code Online (Sandbox Code Playgroud)
成
{ "FOO" : "bar" }
Run Code Online (Sandbox Code Playgroud)
该Lua的模块文档的content_by_lua,这似乎是适当的方法说
不要在同一位置使用此指令和其他内容处理程序指令.例如,不应在同一位置使用此指令和proxy_pass指令.
我的理解是content_by_lua是一个像proxy_pass这样的内容处理程序,每个位置只能使用其中一个.
我不认为有任何方法可以删除proxy_pass,因为这是代理工作方式的基础,因此可以在单独的位置捕获请求,使用content_by_lua,然后传递到实现proxy_pass的位置,或者是否有不同的方法,如rewrite_by_lua哪个更合适?
如果它对其他人有帮助,我添加了以下函数(我的第一个Lua),它删除了user_key3scale需要授权的参数,但如果转发到我们的API则无效:
function remove_user_key()
ngx.req.read_body()
-- log the original body so we can compare to the new one later
local oldbody = ngx.req.get_body_data()
log(oldbody)
-- grab the POST parameters as a table
local params = ngx.req.get_post_args()
-- build up the new JSON …Run Code Online (Sandbox Code Playgroud) 我正在使用一个历史 API,它通过密钥/秘密组合授予访问权限,原始 API 设计者指定的该组合应作为 HTTP 基本身份验证标头中的用户名和密码传递,例如:
curl -u api_key:api_secret http://api.example.com/....
Run Code Online (Sandbox Code Playgroud)
现在我们的 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 脚本是否可以/将成为解决方案的一部分)...
我正在尝试使用使用3Scale API管理的nodejs设置原型API.
我已经能够找到他们的插件集成代码,如下所示:
var ThreeScale = require('3scale').Client;
// keep your provider key secret
var client = new ThreeScale("X");
// you will usually obtain app_id and app_key from request params
client.authrep({ app_id: "Y",
app_key: "Z" }, function(response){
if(response.is_success()) {
// continue
} else {
throw new Error("not authorized " + response.error_message);
}
});
Run Code Online (Sandbox Code Playgroud)
这使得一些意义,我作为服务器模块的一部分.但是,我不确定客户的证书在哪个方程式......
我看到它是因为客户端指向你的应用程序,这里是应用程序的密码......但是实际客户端的用户名/密码呢?在哪里检查?
我觉得我没有抓住他们的架构(可能因为这是我的第一个真正的节点项目,绝对是我第一次使用3Scale)...
那么,客户的要求是什么样的呢?
我想知道Mashery,WSO2和3scale之间的区别.之前使用过API管理器的人可以发表意见吗?每个人的优点和缺点是什么
谢谢
干杯