Fiware - как интегрировать Keyrock IdM, Wilma PEP Proxy и Orion Context Broker?

Я прочитал всю документацию Keyrock и Wilma, и я просмотрел все видео в Академии FIWARE, но мне все еще не удалось добиться успеха в этой интеграции. Я ищу это несколько дней назад, но безуспешно. Я думаю, что в документации FIWARE могут быть учебные пособия, практические занятия ...

У меня есть виртуальная машина с Orion Context Broker и контейнер с Keyrock IdM и Wilma PEP Proxy. Я пытаюсь создать токен доступа для предоставления доступа приложению, но все еще не получил его. Кроме того, я хотел бы знать, как я могу безопасно обмениваться сообщениями между Orion Context Broker и некоторыми устройствами IoT. Действительно, сложно представить, что IoT-устройства должны получать доступ к экрану и вводить свои учетные данные для аутентификации и авторизации, как показано в примерах Keyrock IdM. Что вы предлагаете?


person Dalton Cézane    schedule 06.12.2016    source источник
comment
Я рекомендую вам выполнить шаги, описанные в Уроке 3 курсов Keyrock (edu.fiware .org / course / view.php? id = 79), чтобы узнать, как создавать токены OAuth2. Подробную документацию можно найти здесь (fiware-idm.readthedocs.io/en/latest /oauth2.html). По вопросам Ориона вам помогут мои коллеги из команды IoT.   -  person Álvaro Alonso    schedule 12.12.2016
comment
Читая вопросник, не уверен, какой именно вопрос для Ориона ... @Dalton, не могли бы вы уточнить немного, пожалуйста? Спасибо!   -  person fgalan    schedule 12.12.2016
comment
Уважаемый @Alvaro, я уже посмотрел все видео в Fiware Academy, включая урок 3 (смотрел два раза). У меня возникли проблемы с созданием токена доступа в моем локальном экземпляре IdM. Я уже создал приложение на моем портале IdM, что дало мне идентификатор клиента и секретный идентификатор. Но у меня были сомнения, как запросить действующий токен доступа. Теперь, после небольшого поиска, я узнал и получил токен доступа с POST для idm: 8000 / oauth2 / токен. Я протестировал его, запрашивая информацию о пользователе с помощью idm: 8000 / user? Access_token = mytoken, и это сработало. .   -  person Dalton Cézane    schedule 13.12.2016
comment
Теперь у меня есть еще одно сомнение, @Alvaro: в чем разница между токеном, полученным с помощью POST idm: 8000 / oauth2 / токен (Keyrock Horizon) и токен, полученный с помощью GET idm: 5000 / v2.0 / tokens (Keyrock Keystone)? Не могли бы вы объяснить мне и привести примеры?   -  person Dalton Cézane    schedule 13.12.2016
comment
@fgalan, я хочу обезопасить связь Ориона с другими приложениями. Например: я хочу разрешить приложению получать уведомления от Orion только в том случае, если оно аутентифицировано и авторизовано. Я уже немного искал, но пока безуспешно. В разделе соображения безопасности я прочитал, что это возможно с прокси-сервером PEP. Но как это сделать с уведомлениями? Кроме того, можете ли вы помочь мне с безопасным обменом сообщениями (HTTPS)? Заранее спасибо.   -  person Dalton Cézane    schedule 13.12.2016
comment
@Dalton, токены, созданные с использованием Keystone API (/v2.0/tokens), как раз и являются токенами Keystone, обычно используемыми для выполнения действий со службами Openstack. С другой стороны, токены, созданные с использованием OAuth2 API (/ oauth2 / token), представляют собой токены доступа, используемые для аутентификации пользователей в рамках внешних приложений в соответствии со спецификацией OAuth2.   -  person Álvaro Alonso    schedule 14.12.2016


Ответы (3)


Увидев ответ @albertinisg здесь, я нашел сценарий bash для запроса токена. Я изменил его, чтобы использовать с моими локальными экземплярами, и это сработало.

После регистрации моего приложения на портале FIWARE (дополнительная информация здесь) мне пришлось сделать POST-запрос к http://idm:8000/oauth2/token (idm - это мой локальный экземпляр Keyrock ). С этим действующим токеном я могу получить доступ к контенту в Орионе.

import requests, json, getpass

TOKEN_URL = "http://idm:5000/v2.0/tokens"

USER = raw_input("Username: ")
PASSWORD = getpass.getpass("Password: ")
PAYLOAD = "{\"auth\": {\"passwordCredentials\": {\"username\":\""+USER+"\", \"password\":\""+PASSWORD+"\"}}}"
HEADERS =  {'content-type': 'application/json'}
RESP = requests.post(TOKEN_URL, data=PAYLOAD, headers=HEADERS)

Конфигурация прокси PEP (Wilma) (config.js):

config.app_host = 'my_orion_ip'; //change to your Orion address
config.app_port = '1026'; //change to your Orion port

config.username = 'pep_proxy_credential_obtained_at_portal';
config.password = 'password_obtained_at_portal';

С действующим токеном и сервером PEP Proxy (Wilma), работающим с этой конфигурацией, можно контролировать доступ к Orion, выполняя запрос на адрес PEP Proxy. Прокси-сервер PEP перенаправит этот запрос в IdM (Keyrock), чтобы IdM мог проверить учетные данные пользователя / устройства. Если учетные данные действительны, пользователь / устройство получит действующий токен, и теперь прокси-сервер PEP может разрешить доступ к Orion.

Для связи HTTPS я настроил сервер Nginx, чтобы он работал как обратный прокси (файл .conf):

server {
   listen       443;
   server_name  orion;

   ssl                  on;
   ssl_certificate      /etc/nginx/ssl/orion.crt;
   ssl_certificate_key  /etc/nginx/ssl/orion.key;
   ...
   ...
   location / {
      #root   orion:1026;   #/var/www/yourdomain.com;
       #index  index.php index.html index.htm;
       proxy_set_header        Host $host;
       proxy_set_header        X-Real-IP $remote_addr;
       proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
       proxy_set_header        X-Forwarded-Proto $scheme;

       # Fix the “It appears that your reverse proxy set up is broken" error.
       proxy_pass          http://orion:1026;
       proxy_read_timeout  90;
       proxy_redirect      http://orion:1026 https://orion;
   }
}

Я сделал простое руководство по интеграции FIWARE Orion, Wilma и Keyrock: https://www.slideshare.net/daltoncezane/integrating-fiware-orion-keyrock-and-wilma

Я надеюсь, что этот ответ может помочь кому-то другому.

person Dalton Cézane    schedule 13.12.2016

Что касается Orion, это зависит от интерфейса, который должен быть защищен: либо API службы (т.е. прослушивающий сервер REST, который обычно запускается Orion на порту 1026), API уведомлений, либо оба:

  • Regarding service API:
    • Authentication & authorization: it can be implemented through PEP. The following documentation introduces two PEP alternative implementations. However, note that PEP doesn't work standalone, as it also needs the IDM and Access Control to work. I understand that @Alvaro can explain this topic in detail (with regards to Wilma PEP). It is out of my knowledge.
    • Шифрование: его можно реализовать с помощью прокси, действующего как мост HTTPS-HTTP (например, ngnix) или самим Orion с помощью параметра -https CLI (который работает в сочетании с -key и -cert). В этом разделе документации подробно рассказывается в теме.
  • Regarding notification API:
    • Authentication & authorization: the current implementation of custom notifications (see "Custom notifications" section in the NGSIv2 specification) allows you to include custom HTTP headers that could be used for authentication (e.g. the X-Auth-Token header needed by a PEP instance protecting your endpoint). Note that this is currently done in an static way, i.e. Orion is not able to interact directly with IDM/AccessControl to set the X-Auth-Token value dynamically after expiration, etc. However, it would be possible to develop a process able to do this and set the proper header (if you are interested in this I'd recommend to check "How to add a custom header in outgoing notifications with Orion?" post).
    • Шифрование: ретрансляцию можно реализовать в Компонент Rush. Этот раздел документации подробно описывает в теме.

ОБНОВЛЕНИЕ: начиная с версии 1.7.0, Orion реализует нативные HTTPS-уведомления (т.е. без необходимости Rush).

person fgalan    schedule 13.12.2016
comment
Спасибо за ответ, @fgalan. По поводу первой части (сервисного API) я уже читал документацию (Вопросы безопасности, как объяснялось в предыдущем комментарии. У меня есть IdM (Keyrock) и PEP Proxy (Wilma), работающие в контейнере докеров (я думаю, что контроль доступа - AuthZForce - на данный момент не требуется). Мои сомнения с практической точки зрения, потому что у нас нет примеров такой интеграции (практическое руководство было бы очень полезно) .Также в документации неясно, как использовать -https (без примеров). - person Dalton Cézane; 13.12.2016
comment
ссылка на httpsPrepare.sh в Страница параметров командной строки больше не действует. Это затрудняет настройку среды. По поводу второй части я задам отдельный вопрос, как вы мне предложили. - person Dalton Cézane; 13.12.2016
comment
Похоже ссылка на скрипт в документации неработающая. Мы исправим документацию, но пока сценарий можно найти здесь: github.com/telefonicaid/fiware-orion/blob/master/test/ - person fgalan; 14.12.2016
comment
Не могли бы вы дать мне еще несколько инструкций, чтобы понять, как я могу настроить Orion и Nginx для безопасного обмена информацией? У меня уже установлен nginx, и я его настраиваю. Сомневаюсь, как обстоят дела с интеграцией с Орионом. Спасибо. - person Dalton Cézane; 11.01.2017
comment
Насколько я понимаю, вы имеете в виду использование ngnix для реализации моста HTTPS-to-HTTP, описанного выше. У меня нет под рукой какого-либо примера, но учтите, что это общая тема, а не специфическая для Ориона. Об этом есть много литературы (например, http://stackoverflow.com/questions/3470290/nginx-redirect-https-to-http). - person fgalan; 11.01.2017
comment
Я уже видел эту информацию, и у меня уже настроен Nginx. Мне нужно хорошо понимать, как должен выполняться процесс, чтобы я мог отправлять запросы HTTPS для Orion и получать ответы HTTPS. Не могли бы вы мне еще помочь? - person Dalton Cézane; 12.01.2017
comment
Не уверен, что я понимаю вопрос ... Если nginx правильно настроен для реализации моста HTTPS-to-HTTP (как я понимаю из вашего последнего комментария), тогда вы отправите запрос в HTTPS на nginx, который, по безопасности, отправит тот же запрос к Ориону по HTTP. Затем Orion ответит с помощью HTTP на nginx, который последовательно пересылает ответ исходному клиенту по HTTPS. - person fgalan; 12.01.2017
comment
Спасибо за объяснение. Вчера я настроил nginx, и теперь я могу успешно общаться через HTTPS с orion. Я поместил следующие настройки в файл .conf: `proxy_pass orion: 1026; proxy_read_timeout 90; proxy_redirect orion: 1026 orion; ` - person Dalton Cézane; 14.01.2017
comment
Большой! Возможно, вы могли бы отредактировать свой ответ в этом сообщении, чтобы добавить конфигурацию nginx, которую вы упомянули выше, чтобы другие пользователи могли извлечь из нее выгоду (в настоящее время в рамках потока комментариев его будет труднее найти) - person fgalan; 14.01.2017
comment
@ Дальтон, это выглядит идеально. Спасибо! - person fgalan; 16.01.2017
comment
Ответ был отредактирован, чтобы включить соответствующую информацию о встроенной поддержке уведомлений HTTPS в Orion 1.7.0 (будет выпущен в начале февраля 2017 года). - person fgalan; 31.01.2017

В следующей презентации шаг за шагом показано, как создать платформу Интернета вещей на основе FIWARE и защитить ее с помощью прокси-сервера PEP, Keystone и Keypass.

https://docs.google.com/presentation/d/18LaWZSK4h2wncPF6hNAwK5MToLvJesR3XLrzsqrsmrw/edit?usp=sharing

надеюсь, это поможет

Благодарность

person Jose Manuel Cantera    schedule 19.12.2016