Ibm cloud OpenWhisk中cloudant查询的安全性

Ibm cloud OpenWhisk中cloudant查询的安全性,ibm-cloud,cloudant,openwhisk,ibm-cloud-functions,Ibm Cloud,Cloudant,Openwhisk,Ibm Cloud Functions,我正在Bluemix上建立一个有Cloudant数据存储的Angular SPA 由于OpenWhisk的Bluemix实现不使用VCAP服务,因此我看到了3种使用OpenWhisk作为我的Angular应用程序的cloudant查询api提供程序的选项: 遵循此处所示的传递凭证的模式:(非常有趣的方法btw) 包括凭据,就像我在本地运行一样,如下所示: 使用http API,如下所示:(这突出了传递凭据的安全问题) 由于我的服务不用于发布(它用于我自己的应用程序),我认为选项2是我“最不坏的”

我正在Bluemix上建立一个有Cloudant数据存储的Angular SPA

由于OpenWhisk的Bluemix实现不使用VCAP服务,因此我看到了3种使用OpenWhisk作为我的Angular应用程序的cloudant查询api提供程序的选项:

  • 遵循此处所示的传递凭证的模式:(非常有趣的方法btw)
  • 包括凭据,就像我在本地运行一样,如下所示:
  • 使用http API,如下所示:(这突出了传递凭据的安全问题)
  • 由于我的服务不用于发布(它用于我自己的应用程序),我认为选项2是我“最不坏的”选择。我是否遗漏了什么?我的想法是,尽管很容易发生更改,但它将是最安全的,因为凭据不会公开传递。无服务器基础设施将不得不被黑客攻击

    提前谢谢

    (冗长)更新:(提前道歉)

    我已经走得更远了,但仍然没有答案——现在被困在执行中

    为了澄清,我的目标是让应用程序从Angular Client->OpenWhisk->Cloudant中运行

    在这个最简单的用例中,我想传递一个startTime参数和一个endTime参数,让OpenWhisk获取该时间范围内所有字段的所有记录,并传回所选字段

    根据以下文章中的信息,我得出结论,我可以调用wsk命令行操作并使用我在Javascript函数中设置的绑定,因此不会将我的凭据传递给数据库。这为我提供了一种安全措施(仍然对OpenWhisk操作的其余端点提出疑问)但我想,一旦我运行了我的样本,我就会仔细考虑这一部分

    我的命令行(有效):
    wsk操作调用/my@orgname.com_mybluemixspace/mycfAppName/exec query find--blocking--result--param dbname periors--param query{“selector\”:{\“\u id\”:{\“$gt\”:0},\“properties.time\”:{\“$gt\”:1484190609500,\“$lt\”:1484190609700}

    此操作将成功返回以下内容:
    {
    “文件”:[
    {
    “_id”:“eq1484190609589”,
    “修订版”:“1-b4fe3de75d9c5efc0eb05df38f056a65”,
    “dbSaveTime”:1.484191201099e+12,
    “fipsalpha”:“AK”,
    “fipsnumer”:“02”,
    “几何学”:{
    “坐标”:[
    -149.3691,
    62.5456,
    0
    ],
    “类型”:“点”
    },
    “id”:“ak15062242”,
    “财产”:{
    “警报”:空,
    “cdi”:空,
    “代码”:“15062242”,
    “详细信息”:http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/ak15062242.geojson",
    “dmin”:空,
    “毡”:空,
    “间隙”:空,
    “ID”:“ak15062242”,
    “mag”:1.4,
    “magType”:“ml”,
    “mmi”:空,
    “净”:“ak”,
    “nst”:空,
    “地点”:“阿拉斯加Talkeetna东北45公里处”,
    “rms”:0.5,
    “sig”:30,
    “资料来源”:“ak,”,
    “状态”:“自动”,
    “时间”:1.484190609589e+12,
    “标题”:“阿拉斯加Talkeetna东北1.4-45公里处”,
    “海啸”:0,
    “类型”:“地震”,
    “类型”:“地理服务,起源”,
    “tz”:-540,
    “更新”:1.484191127265e+12,
    “url”:”http://earthquake.usgs.gov/earthquakes/eventpage/ak15062242"
    },
    “类型”:“特征”
    }
    ]
    }

    我在OpenWhisk(下面)中创建的操作返回一个内部服务器错误。我将输入值作为
    {
    “开始时间”:“1484161200000”,
    “结束时间”:“1484190000000”
    }

    以下是我的操作代码:

    `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});
            });
        });
    }`
    
    以下是我的研究链接:
    因为使用了exec查询查找和选择器语法,所以很有用,但对于我需要构建的用于填充数据的更新函数来说,也很酷


    @csantanapr引用的文章

    我是不是忽略了什么


    谢谢!

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

    如果您不需要任何业务逻辑,或者您可以通过使用Cloudant功能(设计文档、视图、映射、减少等)来逃避,并且您正在生成具有特定访问权限(即写与读)的Cloudant API密钥,那么您不需要服务器或无服务的中间件/层

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

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

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

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

    另一种选择是将凭据作为默认参数手动绑定到包或操作,这在您不想这样做时是有意义的