我正在构建一个棱角SPA与一个云数据存储在布卢米克斯。
由于OpenWhisk的Bluemix实现不使用VCAP,所以我看到了3个选项,可以使用OpenWhisk作为我的角度应用程序的cloudant查询的api提供程序:
因为我的服务不是为了发布(它是为我自己的应用程序设计的),所以我认为选项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" }
下面是我的行动代码:
`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引用的文章
我是不是忽略了什么?
谢谢!
发布于 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
https://stackoverflow.com/questions/41497470
复制相似问题