如何配置FIWARE组件以避免未为应用程序响应创建AZF域

时间:2019-05-09 15:07:02

标签: fiware fiware-orion fiware-wilma fiware-keyrock

问题的摘要:如何让FIWARE IdM Keyrock和FIWARE Authzforce正确设置AZF域,从而不会收到“未为应用程序XYZ创建非AZF域”响应?

我正在尝试使用FIWARE Orion,FIWARE PepProxy Wilma,FIWARE IdM Keyrock和FIWARE Authzforce正确配置服务器。 我到达了前三个组件可以正常工作并相互交互的地步,但是现在我尝试插入自动处理,并且出现以下错误: 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(source):来自docker容器的连接被路由到(iptables)FORWARD链中,需要对其进行配置以允许通过它的连接。默认设置是丢弃连接。因此,如果您使用防火墙,则必须对其进行更改:

      • sudo nano /etc/default/ufw
      • 将DEFAULTFORWARDPOLICY设置为“ ACCEPT”。      DEFAULT_FORWARD_POLICY="ACCEPT"
      • 保存文件。
      • 重新加载ufw      sudo ufw reload
    • 在您创建的目录中,在命令行中键入以下命令:sudo docker-compose up -d
    • 几秒钟后,您应该使Context Broker运行并在端口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步:留空
        • 第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-57 498k-85aa-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
      • 说明:trial1
      • HTTP操作:GET
      • 资源:版本
    • 保存
    • 回到应用程序
    • 单击“授权用户”附近的“授权”
    • 将“试用”角色分配给您的用户
  6. 现在使用PostMan获取令牌:

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

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

1 个答案:

答案 0 :(得分:1)

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

有多种策略可以解决这些问题,例如在启动入口点添加等待,在restart:true内添加docker-compose来修改基础架构或使用某些第三方脚本。在答案here中可以找到很好的策略列表。