2017-01-06 10 views
2

Я создаю Угловой SPA с хранилищем данных Cloudant на Bluemix.Безопасность облачного запроса от OpenWhisk

Поскольку реализация Bluemix из OpenWhisk не использует VCAP услуг, я вижу 3 вариант использовать OpenWhisk как мой провайдер API для Cloudant запросов для моего приложения: Угловой

  1. Следуйте образец передачи учетных данных, как показано здесь: https://github.com/IBM-Bluemix/openwhisk-visionapp (очень интересный подход кстати)
  2. Включить учетные данные, как будто я бегу на месте, как показано здесь: https://github.com/IBM-Bluemix/nodejs-cloudant/blob/master/app.js
  3. Используйте HTTP API, как показано здесь:. https://docs.cloudant.com/api.html (который выдвигает на первый план проблему безопасности передачи учетных данных

Поскольку мой сервис не предназначен для публикации (он предназначен для моего собственного приложения), я думаю, что вариант 2 - это мой выбор «наименее всего». Я что-то упускаю? Мое мышление таково, что в то время как хрупкое изменение было бы самым безопасным, поскольку учетные данные не передаются в открытом доступе. Безсерверная инфраструктура должна быть взломана ...

Заранее благодарен!

(длинный) Update: (извинения заранее)

Я получил немного дальше вдоль, но до сих пор нет ответа - застрял в исполнении прямо сейчас.

Чтобы уточнить, моя цель - приложение для потока от Углового клиента -> OpenWhisk -> Cloudant.

В этом простейшем случае я хочу передать параметр startTime и параметр endTime, запустите OpenWhisk все записи в этом временном диапазоне со всеми полями и передав выбранные поля. В моем примере у меня есть данные о землетрясениях USGS в модифицированном формате GeoJSON.

Следующая информация из следующих статей ниже, я пришел к выводу, что могу вызвать действия командной строки wsk и использовать привязки, которые я установил, из моей функции Javascript и, следовательно, не передавать мои учетные данные в базу данных. Это дает мне меру безопасности (все еще сомневаюсь в остальной конечной точке моего действия OpenWhisk), но я думаю, что когда я получу свой пример, я думаю, что через эту часть.

Моя командная строка (которая работает): wsk action invoke /[email protected]_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:'/[email protected]_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

ли я с видом что-то?

Спасибо!

ответ

2

Я предполагаю, что вы пытаетесь получить доступ к своей базе данных Cloudant непосредственно из вашего углового клиентского кода из браузера.

Если вам не нужна какая-либо бизнес-логика или вы можете уйти, используя функции Cloudant (проектные документы, представления, карту, сокращение и т. Д.), И вы генерируете ключи Cloudant API с определенным доступом (т.е. записываете vs. read), тогда вам не нужен сервер или безплатная средняя одежда/ярус.

Но теперь давайте вернемся, большинству людей нужен этот уровень, и если вы ищете OpenWhisk, то вам очень повезло, что это очень легко сделать.

OpenWhisk на Bluemix поддерживает учетные данные службы VCAP, но по-другому. Название Давайте у вас есть Bluemix Org [email protected] и пространство dev что бы перевести OpenWhisk имен [email protected]_dev

Если добавить Cloudant службу по пространству dev в Bluemix, это создаст сервис ключевые учетные данные для этого Cloudant счета. Эти учетные данные предоставляют вам доступ к супер-мощности, означающий, что вы являетесь администратором.

Если вы хотите использовать учетные данные Cloudman в OpenWhisk, вы можете использовать автоматическое связывание, сгенерированное с помощью пакета cloudam. Для этого с помощью прогона OpenWhisk CLI wsk package refresh это приведет к загрузке учетных данных Cloudant и созданию нового пакета с учетными данными, привязанными как параметр по умолчанию для всех облачных действий в этом пакете. Это измененная версия №1 выше

Другой альтернативой является привязка учетных данных вручную к пакету или действию в качестве параметров по умолчанию, это имеет смысл, если вы не хотите использовать учетные данные администратора супермощной мощности, и вы создали ключ API Cloudant для конкретной базы данных. Это вариант № 1 выше.

Я бы не рекомендовал ставить учетные данные в исходном коде # 2

Для варианта № 3, что небезопасно, чтобы передать свои полномочия в части URL, как https://username:[email protected], но передавая имя пользователя и пароль в Authorization заголовок по https закреплен. Это связано с тем, что даже если вы используете безопасный транспорт https, все в URI/URL-адресе не зашифровано, каждый может видеть это значение, но передача секретов в теле или заголовке является стандартной практикой, поскольку это передача после установления безопасного соединения.

Затем вы создаете действия, которые используют учетные данные в качестве параметров в действиях OpenWhisk для создания вашей бизнес-логики для вашего бэкэнд.

Затем, как получить доступ к этому бэкэнду из браузера, хорошо, что OpenWhisk имеет функцию API Gateway в экспериментальном режиме, которая позволяет вам раскрывать ваши действия в виде открытых API с поддержкой CORS.

Только URL-адрес выставлен, ваши учетные данные в качестве параметров по умолчанию никогда не отображаются.

Если вы хотите увидеть пример на выезде из Raymond Camden Публикаций, где он покажет Ионные/Угловая App доступ к его Cloudant База данных Кошки https://www.raymondcamden.com/2016/12/23/going-serverless-with-openwhisk