1

问题总结:如何让 FIWARE IdM Keyrock 和 FIWARE Authzforce 正确设置 AZF 域,从而不会得到“AZF domain not created for application XYZ”响应?

我正在尝试正确配置具有 FIWARE Orion、FIWARE PepProxy Wilma、FIWARE IdM Keyrock、FIWARE Authzforce 的服务器。我到达了前 3 个组件正常工作并相互交互的地步,但现在我正在尝试插入自动化并且我收到以下错误: AZF domain not created for application. 我已经尝试了以下链接中提供的所有解决方案,但没有一个有效:

在下面,您可以找到重现我的场景的说明:

  1. 使用 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)FORWARD 链中,这需要配置为允许通过它进行连接。默认是 DROP 连接。因此,如果您使用防火墙,则必须对其进行更改:

      • sudo nano /etc/default/ufw
      • 将 DEFAULTFORWARDPOLICY 设置为“接受”。 DEFAULT_FORWARD_POLICY="ACCEPT"
      • 保存文件。
      • 重新加载ufw sudo ufw reload
    • 在您创建的目录中,在命令行中键入以下命令:sudo docker-compose up -d.
    • 几秒钟后,您应该让 Context Broker 运行并在 port 上侦听1026
    • 检查一切是否正常
      curl localhost:1026/version
  2. 安装 FIWARE IdM Keyrock(用于通过 Orion Context Broker 进行身份验证):
    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 步:留空
        • 第三步:选择“提供者”
        • 第4步:
          • 点击“OAuth2 Credentials”并记下“Client ID”(94480bc9-43e8-4c15-ad45-0bb227e42e63)和“Client Secret”(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-8 -ef77ue5f6234)
          • 单击“授权”(用户)并授权所有现有用户具有两个角色(所有选项的购买者和提供者)
          • 单击“授权”(组织)并授权具有这两个角色的所有现有组织(所有选项的购买者和提供者)
  3. 安装 FIWARE Authzforce

    • sudo docker pull authzforce/server:latest(在撰写本文时最新版本为 8.1.0)
    • sudo docker run -d -p 8085:8080 --name authzforce_server authzforce/server
  4. 安装 FIWARE PEP 代理 Wilma(用于为 Orion 启用 https 和身份验证):

    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
  5. 创建用户角色:重新连接到 IdM http://localhost:3000

    • 单击您的应用程序
    • 点击Manage rules页面顶部的
    • 单击+角色附近的按钮
      • 名称:《审判》
    • 节省
    • 单击+权限附近的按钮
      • 权限名称:trial1
      • 说明:试用1
      • HTTP 操作:GET
      • 资源:版本
    • 节省
    • 回到应用程序
    • 点击“授权用户”附近的“授权”
    • 将“试用”角色分配给您的用户
  6. 现在使用 PostMan 获取令牌:

    • 连接到 localhost:3000/oauth2/token 并发送以下参数
      • 身体:
      • 用户名:
      • 密码:
      • 授予类型:密码
      • 标题:
      • 内容类型:application/x-www-form-urlencoded
      • 授权:基本
    • 记下获得的access_token
  7. 尝试使用以下参数通过http://localhost:5056/version连接到 Orion:

    • 标题:
      • X-授权令牌:
  8. 您将获得以下响应: AZF domain not created for application 91180bc9-43e8-4c14-ad45-0bb117e42e63

4

1 回答 1

1

您的本地设置似乎存在时间问题。更具体地说,在 PEP 代理超时之前,您机器上的时间似乎docker-compose没有等待 Keyrock 可用。

有多种策略可以处理这些问题,例如在启动入口点中添加等待、restart:truedocker-compose修改基础架构中添加或使用某些第三方脚本。可以在此处的答案中找到一个很好的策略列表。

于 2019-05-16T19:22:34.953 回答