问题摘要:我们如何让FIWARE IdM Keyrock和FIWARE Authzforce正确设置AZF域,从而不得到"未为应用程序XYZ创建AZF域"响应?
我正在尝试使用 FIWARE Orion、FIWARE PepProxy Wilma、FIWARE IdM Keyrock、FIWARE Authzforce 正确配置服务器。 我到达了前 3 个组件正常工作并相互交互的点,但现在我正在尝试插入自动化并得到以下错误:AZF domain not created for application
. 我已经尝试了以下链接中提供的所有解决方案,但没有人工作:
- https://fiware-pep-proxy.readthedocs.io/en/latest/user_guide/#level-2-basic-authorization
- https://www.youtube.com/watch?v=coxFQEY0_So
- 如何将 Fiware PEP WILMA 代理配置为在我自己的服务器上使用 Keyrock 和 Orion 实例
- Fiware IDM+AuthZForce+PEP-Proxy-Wilma
- Fiware - 如何将PEP代理连接到Orion并使用HTTPS配置两者?
- Fiware AuthZForce 错误:"未为应用程序创建 AZF 域">
- AuthZForce 安全级别 2:基本授权错误"未为应用程序创建 AZF 域">
- https://www.slideshare.net/daltoncezane/integrating-fiware-orion-keyrock-and-wilma
- "未为应用程序创建 AZF 域" AuthZforce
- Fiware AuthZForce 错误:"未为应用程序创建 AZF 域">
- 适用于产品的组件
- https://www.slideshare.net/FI-WARE/adding-identity-management-and-access-control-to-your-app-70523086
- 官方文档不可用,因为引用(可能)旧的 python 版本的 IdM
在下文中,您可以找到重现我的方案的说明:
-
使用 Docker 容器安装 Orion
- 在系统上创建一个要工作的目录(例如,
/home/fiware-orion-docker
)。 - 在目录中创建一个名为
docker-compose.yml
的新文件,其中包含以下内容:
mongo: image: mongo:3.4 command: --nojournal orion: image: fiware/orion links: - mongo ports: - "1026:1026" command: -dbhost mongo -logLevel DEBUG dns: - 208.67.222.222 - 208.67.220.220
- 注意:如果没有DNS,它将永远不会发送通知!!
注意 2(来源):来自 docker 容器的连接被路由到(iptables)转发链中,这需要配置为允许通过它进行连接。默认值是删除连接。因此,如果您使用防火墙,则必须更改它:
sudo nano /etc/default/ufw
- 将 DEFAULTFORWARDPOLICY 设置为 "ACCEPT"。
DEFAULT_FORWARD_POLICY="ACCEPT"
- 保存文件。
- 重新加载 ufw
sudo ufw reload
- 在您创建的目录中,在命令行中键入以下命令:
sudo docker-compose up -d
。 - 几秒钟后,您应该运行上下文代理并侦听端口
1026
。 - 检查一切是否适用于
curl localhost:1026/version
- 在系统上创建一个要工作的目录(例如,
-
安装 FIWARE IdM Keyrock(用于通过 Orion 上下文代理进行身份验证):
https://github.com/ging/fiware-idm- 警告 -1:(如果下一个命令不起作用:
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu artful stable"
) - 警告 0:如果您有防火墙:禁用它,否则 docker-compose 将无法正常工作
- sudo apt-get install docker-compose
- Mkdir fiware-IDM
- CD Fiware-IDM
- 创建 docker-compose.yml
nano docker-compose.yml
version: "3.5" services: keyrock: image: fiware/idm:7.6.0 container_name: fiware-keyrock hostname: keyrock networks: default: ipv4_address: 172.18.1.5 depends_on: - mysql-db ports: - "3000:3000" environment: - DEBUG=idm:* - IDM_DB_HOST=mysql-db - IDM_HOST=http://localhost:3000 - IDM_PORT=3000 # Development use only # Use Docker Secrets for Sensitive Data - IDM_DB_PASS=secret - IDM_DB_USER=root - IDM_ADMIN_USER=admin - IDM_ADMIN_EMAIL=admin@test.com - IDM_ADMIN_PASS=1234 mysql-db: restart: always image: mysql:5.7 hostname: mysql-db container_name: db-mysql expose: - "3306" ports: - "3306:3306" networks: default: ipv4_address: 172.18.1.6 environment: # Development use only # Use Docker Secrets for Sensitive Data - "MYSQL_ROOT_PASSWORD=secret" - "MYSQL_ROOT_HOST=172.18.1.5" volumes: - mysql-db:/var/lib/mysql networks: default: ipam: config: - subnet: 172.18.1.0/24 volumes: mysql-db: ~
sudo docker-compose up -d
(这将自动下载两个映像并运行 IdM Keyrock 服务。(-d 用于在后台运行它))。- 现在,您应该能够通过网站访问身份管理工具 http://localhost:3000
- 用户名:
admin@test.com
- 密码:
1234
- 用户名:
- 注册新用户并通过界面启用它
- 然后使用 GUI 执行以下操作:
- 创建"组织"(例如,ORGANIZ1)
- 创建"应用程序"
- 第 1 步:
Name: Orion Idm Description: Orion Idm URL: http://localhost Callback URL: http://localhost Grant Type: Authorization Code, Implicit, Resource Owner Password, Client Credentials, Refresh Token Provider: newuser
- 第 2 步:留空
- 步骤3:选择"提供商">
- 第 4 步:
- 单击"OAuth2 凭据"并记下"客户端 ID"(94480bc9-43e8-4c15-ad45-0bb227e42e63)和"客户端密钥"(4f6ye5y7-b90d-473a-3rr7-ea2f6dd43246)
- 单击"PEP 代理",然后单击"注册新的 PEP 代理">
- 记下"应用程序 ID"(94480bc9-43e8-4c15-ad45-0bb227e42e63)、"Pep 代理用户名"(pep_proxy_dad356d2-dasa-4f95-a9hf-9ab06tccf929)和"Pep 代理密码"(pep_proxy_a33667ec-57y1-498k-85aa-ef77ue5f6234)
- 单击"授权"(用户)并授权具有两个角色的所有现有用户(所有选项的购买者和提供者)
- 单击"授权"(组织)并授权具有两个角色的所有现有组织(所有选项的购买者和提供者)
- 第 1 步:
- 警告 -1:(如果下一个命令不起作用:
-
安装 FIWARE Authzforce
sudo docker pull authzforce/server:latest
(在撰写本文时最新的是 8.1.0)sudo docker run -d -p 8085:8080 --name authzforce_server authzforce/server
-
安装 FIWARE PEP 代理 Wilma(用于为 Orion 启用 https 和身份验证):
- Git 克隆 https://github.com/ging/fiware-pep-proxy.git
- CD fiware-pep-proxy
- cp config.js.template config.js
- 纳米配置.js
var config = {}; // Used only if https is disabled config.pep_port = 5056; config.https = undefined config.idm = { host: 'localhost', port: 3000, ssl: false } config.app = { host: 'localhost', port: '1026', ssl: false // Use true if the app server listens in https } config.response_type = 'code'; // Credentials obtained when registering PEP Proxy in app_id in Account Portal config.pep = { app_id: '91180bc9-43e8-4c14-ad45-0bb117e42e63', username: 'pep_proxy_dad356d2-dasa-4f95-a9hf-9ab06tccf929', password: 'pep_proxy_a33667ec-57y1-498k-85aa-ef77ue5f6234', trusted_apps : [] } // in seconds config.cache_time = 300; // list of paths that will not check authentication/authorization // example: ['/public/*', '/static/css/'] config.public_paths = []; config.magic_key = undefined; module.exports = config; config.authorization = { enabled: true, pdp: 'authzforce', // idm|authzforce azf: { protocol: 'http', host: 'localhost', port: 8085, custom_policy: undefined, // use undefined to default policy checks (HTTP verb + path). } }
- 安装所有依赖项
npm install
- 运行代理
sudo node server
-
创建用户角色: 重新连接到 IdM
http://localhost:3000
:- 点击您的申请
- 点击页面顶部的
Manage rules
- 单击"角色"附近的"
+
"按钮- 名称:"审判">
- 救
- 单击"权限"附近的"
+
"按钮- 权限名称:试用版1
- 描述: 试用1
- HTTP 操作:获取
- 资源:版本
- 救
- 回到应用程序
- 点击"授权用户"附近的"授权"> 向用户
- 分配"试用"角色
-
现在使用PostMan获取令牌:
- 连接到本地主机:3000/OAuth2/令牌并发送以下参数
- 身体:
- 用户名:
- 密码:
- grant_type:密码
- 页眉:
- 内容类型:application/x-www-form-urlencode
- 授权:基本
- 记下获得的
access_token
- 连接到本地主机:3000/OAuth2/令牌并发送以下参数
-
尝试使用以下参数 http://localhost:5056/version 连接到 Orion:
- 页眉:
- X-身份验证令牌:
- 页眉:
-
您将获得以下响应:
AZF domain not created for application 91180bc9-43e8-4c14-ad45-0bb117e42e63
您的本地设置似乎存在计时问题。更具体地说,在 PEP 代理超时之前,计算机上docker-compose
的时间似乎没有等待 Keyrock 可用。
有多种策略可以处理这些问题,例如在启动入口点中添加等待、在docker-compose
中添加restart:true
修改基础结构或使用某些第三方脚本。一个很好的策略列表可以在答案中找到 这里.