标签: 3scale

如何使用Nginx和Lua操作POST请求的JSON主体?

我正在做一个概念证明来演示我们如何在堆栈中实现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)

lua nginx 3scale

11
推荐指数
1
解决办法
2万
查看次数

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

我正在使用一个历史 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 脚本是否可以/将成为解决方案的一部分)...

lua http nginx 3scale

3
推荐指数
1
解决办法
3383
查看次数

如何从服务器和客户端的角度使用3Scale的`authrep`功能?

我正在尝试使用使用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)...

那么,客户的要求是什么样的呢?

authentication api node.js 3scale

1
推荐指数
1
解决办法
561
查看次数

Mashery vs WSO2 vs 3scale

我想知道Mashery,WSO2和3scale之间的区别.之前使用过API管理器的人可以发表意见吗?每个人的优点和缺点是什么

谢谢

干杯

wso2 mashery 3scale

1
推荐指数
1
解决办法
4088
查看次数

标签 统计

3scale ×4

lua ×2

nginx ×2

api ×1

authentication ×1

http ×1

mashery ×1

node.js ×1

wso2 ×1