首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OpenWhisk云查询的安全性

OpenWhisk云查询的安全性
EN

Stack Overflow用户
提问于 2017-01-06 01:20:13
回答 1查看 299关注 0票数 2

我正在构建一个棱角SPA与一个云数据存储在布卢米克斯。

由于OpenWhisk的Bluemix实现不使用VCAP,所以我看到了3个选项,可以使用OpenWhisk作为我的角度应用程序的cloudant查询的api提供程序:

  1. 遵循下面所示的传递凭据的模式:https://github.com/IBM-Bluemix/openwhisk-visionapp (非常有趣的方法)
  2. 包含凭据,就像我在本地运行一样,如下所示:https://github.com/IBM-Bluemix/nodejs-cloudant/blob/master/app.js
  3. 使用http,如下图所示:https://docs.cloudant.com/api.html (突出显示传递凭据的安全性问题)。

因为我的服务不是为了发布(它是为我自己的应用程序设计的),所以我认为选项2是我“最不邪恶”的选择。我是不是遗漏了什么?我的想法是,虽然易受变化的影响,但它将是最安全的,因为凭据不是公开传递的。无服务器的基础设施将不得不被黑.

提前感谢!

(冗长)更新:(事先道歉)

我已经走得更远了一点,但还是没有回答--现在还在执行死刑。

为了澄清,我的目标是使应用程序从-> OpenWhisk -> Cloudant的角度客户端流出来。

在这个最简单的用例中,我希望传递一个startTime参数和一个endTime参数,让OpenWhisk用所有字段获取该时间范围内的所有记录,并传回选定的字段。在我的示例中,我使用了修改后的GeoJSON格式的USGS地震数据。

根据以下文章中的信息,我得出的结论是,我可以调用wsk命令行操作,并使用我在Javascript函数中设置的绑定,因此不会将我的凭据传递给数据库。这给了我一定程度的安全性(仍然质疑我的OpenWhisk操作的其他端点),但是我想,一旦我运行了我的示例,我就会仔细考虑其中的那个部分。

我的命令行(起作用):wsk action invoke /my@orgname.com_mybluemixspace/mycfAppName/exec-query-find --blocking --result --param dbname perils --param query {\"selector\":{\"_id\":{\"$gt\":0},\"properties.time\":{\"$gt\":1484190609500,\"$lt\":1484190609700}}}

这将成功地返回以下内容:

{ "docs": [ { "_id": "eq1484190609589", "_rev": "1-b4fe3de75d9c5efc0eb05df38f056a65", "dbSaveTime": 1.484191201099e+12, "fipsalpha": "AK", "fipsnumer": "02", "geometry": { "coordinates": [ -149.3691, 62.5456, 0 ], "type": "Point" }, "id": "ak15062242", "properties": { "alert": null, "cdi": null, "code": "15062242", "detail": "http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/ak15062242.geojson", "dmin": null, "felt": null, "gap": null, "ids": ",ak15062242,", "mag": 1.4, "magType": "ml", "mmi": null, "net": "ak", "nst": null, "place": "45km ENE of Talkeetna, Alaska", "rms": 0.5, "sig": 30, "sources": ",ak,", "status": "automatic", "time": 1.484190609589e+12, "title": "M 1.4 - 45km ENE of Talkeetna, Alaska", "tsunami": 0, "type": "earthquake", "types": ",geoserve,origin,", "tz": -540, "updated": 1.484191127265e+12, "url": "http://earthquake.usgs.gov/earthquakes/eventpage/ak15062242" }, "type": "Feature" } ] }

我在OpenWhisk中创建的操作(下面)返回一个内部服务器错误。我将输入值作为

{ "startTime": "1484161200000", "endTime": "1484190000000" }

下面是我的行动代码:

代码语言:javascript
复制
`var openWhisk = require('openwhisk');
var ow = openWhisk({
    api_key:'im really a host'
});

function main(params) {

  return new Promise(function(resolve, reject) {
  ow.actions.invoke({
    actionName:'/my@orgname.com_mybluemixspace/mycfAppName/exec-query-find',
    blocking:true,
    parameters:{
      dbname: 'perils',
      query:  {
        "selector": {
          "_id": {
            "$gt": 0
          },
          "properties.time": {
            "$gt": params.startTime,
            "$lt": params.endTime
          }
        }
      }
    }
    }).then(function(res) {
            //get the raw result
            var raw = res.response.result.rows;
            //lets make a new one
            var result = [];
            raw.forEach(function(c) {
                result.push({id:c.docs._id, time:c.docs.properties.time, title:c.docs.properties.title});
            });
            resolve({result:result});
        });
    });
}`

以下是我的研究的链接:http://infrastructuredevops.com/08-17-2016/news-openwhisk-uniq.html

非常有用,因为使用了exec-查询-查找和选择器语法使用,但也酷的更新功能,我需要构建填充我的数据!

https://www.raymondcamden.com/2016/12/23/going-serverless-with-openwhisk

@csantanapr引用的文章

我是不是忽略了什么?

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2017-01-06 02:26:17

我假设您要做的是直接从浏览器的角度客户端代码访问Cloudant DB。

如果您不需要任何业务逻辑,或者您可以使用Cloudant特性(设计文档、视图、地图、缩减等)。而且您正在生成具有特定访问权限的Cloudant密钥(即写和读),然后您不需要服务器或无服务的中间层/层。

但是现在让我们来看看现实吧,大多数人都需要这个层,如果您正在寻找一个OpenWhisk,那么您很幸运,这是非常容易做到的。

Bluemix上的OpenWhisk支持VCAP服务凭据,但方式不同。让我们给您命名一个Bluemix carlos@example.com和spacedev,它将转换为OpenWhisk命名空间carlos@example.com_dev

如果在Bluemix中的空间dev下添加Cloudant服务,这将为该Cloudant帐户生成服务密钥凭据。这个凭据给你超级权力的访问意味着你是管理员。

如果要在OpenWhisk中使用此Cloudant凭据,可以使用使用cloudant包生成的自动绑定。要做到这一点,使用OpenWhisk CLI运行wsk package refresh,这将提取Cloudant凭据,并创建一个新包,将凭据绑定为该包下所有cloudant操作的默认参数。这是上面#1的修改版本。

另一种选择是将凭据手动绑定到包或操作作为默认参数,当您不想使用超级电源管理凭据时,这是有意义的,并且为特定的数据库生成了一个Cloudant键。这是上面的选项1。

我不建议将凭据放在源代码#2中。

对于选项3,不安全的是将您的凭据作为https://username:password@user.cloudant.com等URL的一部分传递,但是通过https在Authorization头中传递用户名和密码是安全的。这是因为即使您使用的是安全传输https,URI/URL中的所有内容都不是加密的,任何人都可以看到该值,但是在主体或头中传递秘密是标准做法,因为这是在建立安全连接之后进行传输的。

然后,创建将凭据用作OpenWhisk操作中的参数的操作,以构建后端的业务逻辑。

那么如何从浏览器访问这个后端呢,好吧,OpenWhisk有一个实验性的APIs特性,它允许您使用CORS启用的公共API公开您的操作。

只有一个url是公开的,您作为默认参数的凭据永远不会公开。

如果你想看一个例子,看看Raymond的博客文章,他展示了Ionic/Angular应用程序访问他的Cloudant https://www.raymondcamden.com/2016/12/23/going-serverless-with-openwhisk

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

https://stackoverflow.com/questions/41497470

复制
相关文章

相似问题

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