Fiware - 如何集成 Keyrock IdM、Wilma PEP 代理和 Orion Context Broker?

Posted

技术标签:

【中文标题】Fiware - 如何集成 Keyrock IdM、Wilma PEP 代理和 Orion Context Broker?【英文标题】:Fiware - How to integrate Keyrock IdM, Wilma PEP Proxy and Orion Context Broker? 【发布时间】:2017-04-21 07:59:48 【问题描述】:

我阅读了 Keyrock 和 Wilma 的所有文档,并观看了 FIWARE 学院的所有视频,但我仍然没有在此集成中取得成功。我从几天前开始就在寻找这个,但没有成功。我认为FIWARE文档可以有教程,动手......

我有一个带有 Orion Context Broker 的 VM 和一个带有 Keyrock IdM 和 Wilma PEP 代理的容器。我正在尝试生成访问令牌以授予应用程序访问权限,但我仍然没有得到它。此外,我想知道如何在 Orion Context Broker 和一些物联网设备之间安全地交换消息。事实上,考虑 IoT 设备必须访问屏幕并将其凭据进行身份验证和授权(如 Keyrock IdM 示例所示)是很复杂的。你有什么建议?

【问题讨论】:

我建议您按照 Keyrock 课程 (edu.fiware.org/course/view.php?id=79) 第 3 课中说明的步骤了解如何创建 OAuth2 令牌。可以在此处找到详细文档 (fiware-idm.readthedocs.io/en/latest/oauth2.html)。关于 Orion 的问题,我物联网团队的同事会为您提供帮助。 阅读问题帖子,不确定哪个特定问题是针对 Orion 的...@Dalton,您能详细说明一下吗?谢谢! 亲爱的@Alvaro,我已经看过Fiware Academy 的所有视频,包括第3 课(我看了两遍)。我在本地 IdM 实例中创建访问令牌时遇到问题。我已经在我的 IdM 门户中创建了应用程序,它为我提供了客户端 ID 和秘密 ID。但是我对如何请求有效的访问令牌有疑问。现在,经过一番搜索,我发现并获得了一个带有 POST 到idm:8000/oauth2/token 的访问令牌。我用idm:8000/user?access_token="mytoken" 对它进行了测试,请求用户信息并且它有效。 现在,我还有一个疑问,@Alvaro:通过 POST idm:8000/oauth2/token (Keyrock Horizo​​n) 获得的令牌与通过 GET idm:5000/v2.0/tokens (Keyrock Keystone) 获得的令牌有什么区别?能否请您解释一下并举例说明? @Dalton,使用 Keystone API (/v2.0/tokens) 创建的令牌正是这样,Keystone 令牌通常用于执行 Openstack 服务的操作。另一方面,使用 OAuth2 API (/oauth2/token) 创建的令牌是用于在遵循 OAuth2 规范的外部应用程序范围内对用户进行身份验证的访问令牌 【参考方案1】:

关于 Orion,它取决于要保护的接口,服务 API(即 Orion 通常在端口 1026 上运行的侦听 REST 服务器)、通知 API 或两者:

关于服务 API: 认证授权:可以通过PEP实现。 以下documentation 介绍了两种 PEP 替代方案 实施。但是,请注意 PEP 不能独立工作,因为它 还需要 IDM 和访问控制才能工作。我明白@Alvaro 可以详细解释这个话题(关于 Wilma PEP)。出来了 据我所知。 加密:可以通过代理作为 HTTPS-to-HTTP 来实现 桥接(例如ngnix)或 Orion 本身使用 -https CLI 参数(与-key-cert 结合使用)。这 section of the documentation 详细说明。 关于通知 API: 身份验证和授权:当前的实现 自定义通知(请参阅NGSIv2 规范中的“自定义通知”部分)允许您包含自定义 HTTP 标头 可用于身份验证(例如,需要 X-Auth-Token 标头 由保护您的端点的 PEP 实例)。注意 目前这是以静态方式完成的,即 Orion 无法 直接与 IDM/AccessControl 交互以设置X-Auth-Token 到期后动态值等。但是,有可能开发一个 进程能够做到这一点并设置正确的标题(如果您有兴趣 在此我建议检查"How to add a custom header in outgoing notifications with Orion?" 帖子)。 加密:可以在Rush组件中实现中继。这 section of the documentation 详细说明。

更新:从 1.7.0 版开始,Orion 实现了原生 HTTPS 通知(即不需要 Rush)。

【讨论】:

感谢@fgalan 的回答。关于第一部分(服务 API),我已经阅读了文档(Security Considerations,如之前的评论中所述。我有 IdM(Keyrock)和 PEP 代理(Wilma)在 docker 容器中运行(我认为访问控制 - AuthZForce - 现在没有必要)。我的怀疑是在实际方面,因为我们没有这种集成的例子(“动手指南”会非常有用)。此外,文档不清楚如何使用-https(无示例)。 command line options page 中“httpsPrepare.sh”的链接不再有效。这使得配置环境更加困难。关于第二部分,我将按照您的建议提出一个单独的问题。 不确定我是否理解这个问题...如果 nginx 正确配置为实现 HTTPS 到 HTTP 桥接(正如我从您的最后评论中理解的那样),那么您将发送 HTTPS 请求到nginx 在 secuence 中将使用 HTTP 向 Orion 发送相同的请求。然后,Orion 将使用 HTTP 响应到 nginx,nginx 依次将响应转发到 HTTPS 中的原始客户端。 太棒了!也许您可以在这篇文章中编辑您的答案,以添加您上面提到的 nginx 配置,以便其他用户可以从中受益(目前作为 cmets 线程的一部分,它可能更难找到) @Dalton,它看起来很完美。谢谢!【参考方案2】:

看到@albertinisg here 的回答,我找到了一个bash script 用于令牌请求。我将其更改为与我的本地实例一起使用,并且它有效。

在 FIWARE 门户 (more information here) 注册我的应用程序后,我必须向 http://idm:8000/oauth2/token 发出 POST 请求(idm 是我的本地 Keyrock 实例)。有了这个有效的令牌,我就可以访问 Orion 中的内容了。

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 代理 (Wilma) 服务器,可以控制对 Orion 的访问,以向 PEP 代理地址发出请求。 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

我希望这个答案可以帮助别人。

【讨论】:

【参考方案3】:

以下演示将逐步向您展示如何创建基于 FIWARE 的物联网平台并使用 PEP 代理、Keystone 和 Keypass 保护它。

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

希望对你有帮助

谢谢

【讨论】:

以上是关于Fiware - 如何集成 Keyrock IdM、Wilma PEP 代理和 Orion Context Broker?的主要内容,如果未能解决你的问题,请参考以下文章

AuthZforce 在没有固件启用程序的情况下使用

XACML 规则中如何使用 Fiware 服务和服务路径?

Fi-ware IDM - Oauth2 php客户端配置

fiware POI:无法添加 poi:始终未经授权

请教大神IDM下载器无法集成到360浏览器怎么办

Keyrock 的 CORS 问题