Ibm cloud OpenWhisk中cloudant查询的安全性
我正在Bluemix上建立一个有Cloudant数据存储的Angular SPA 由于OpenWhisk的Bluemix实现不使用VCAP服务,因此我看到了3种使用OpenWhisk作为我的Angular应用程序的cloudant查询api提供程序的选项: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是我“最不坏的”
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
和spacedev
将转换为OpenWhisk命名空间carlos@example.com_dev
如果您在Bluemix中的空间dev
下添加Cloudant服务,这将为此Cloudant帐户生成服务密钥凭据。此凭据为您提供超级访问权限,意味着您是管理员
如果希望在OpenWhisk中使用此Cloudant凭据,可以使用Cloudant包生成的自动绑定。
要使用OpenWhisk CLI执行此操作,请运行wsk package refresh
,这将提取Cloudant凭据并创建一个新包,其中凭据绑定为该包下所有Cloudant操作的默认参数。这是上面#1的修改版本
另一种选择是将凭据作为默认参数手动绑定到包或操作,这在您不想这样做时是有意义的