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 Horizon) 获得的令牌与通过 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?的主要内容,如果未能解决你的问题,请参考以下文章