3

我有一个关于 PEP 代理文件的问题。我的 keystone 服务在 192.168.4.33:5000 上运行。我的 Horizo​​n 服务在 192.168.4.33:443 上运行。

我的 WebHDFS 服务正在 192.168.4.180:50070 上运行,我打算在 192.168.4.180:80 上运行 PEP 代理

但我没有得到的是我应该用什么来代替 config.account_host?在 keyrock 管理器的 mysql 数据库中,有一个带有“idm”密码的“idm”用户,并且我通过身份管理器上的 curl 发出的每个请求都有效。

但是有了这个配置:

config.account_host = 'https://192.168.4.33:443';
config.keystone_host = '192.168.4.33';
config.keystone_port = 5000;
config.app_host = '192.168.4.180';
config.app_port = '50070';
config.username = 'idm';
config.password = 'idm';

当我启动 pep-proxy 时:

sudo node server.js

我得到下一个错误:

Starting PEP proxy in port 80. Keystone authentication ...
Error in keystone communication {"error": {"message": "The request you     
have made requires authentication.", "code": 401, "title":   
"Unauthorized"}}
4

1 回答 1

4

首先,我不会在您的 输入端口config.account_host,因为那里不需要,但这不会干扰操作。

我的猜测是您使用自己的KeyRock FIWARE Identity Manager并默认提供角色。

如果您检查代码,PEP 代理会向KeyRock发送一个域范围的请求,就像Keystone v3 API中一样。

所以问题是,idm您用来验证 PEP 的用户可能没有任何域角色。检查它的解决方法是:

  1. 尝试Domain Scoped请求:

    curl -i \
      -H "Content-Type: application/json" \
      -d '
    { "auth": {
        "identity": {
          "methods": ["password"],
          "password": {
            "user": {
              "name": "idm",
              "domain": { "id": "default" },
              "password": "idm" 
            }
          }
        },
        "scope": {
          "domain": {
            "id": "default" 
          }
        }
      }
    }' \
      http://192.168.4.33:5000/v3/auth/tokens ; echo
    

如果您获得401代码,则您无权提出Domain Scoped请求。

  1. 检查用户是否在此域中具有任何角色。为此,您需要使用Default Scope请求获取 Auth 令牌:

      curl -i   -H "Content-Type: application/json"   -d '
    { "auth": {
        "identity": {
          "methods": ["password"],
          "password": {
            "user": {
              "name": "idm",
              "domain": { "id": "default" },
              "password": "idm" 
            }
          }
        }
      }
    }'   http://192.168.4.33:5000/v3/auth/tokens ; echo
    

这将返回X-Subject-Token解决方法所需的 a。

  1. default使用该令牌,我们将使用我们之前选择的用户向域发送请求idm,以检查我们是否在那里分配了任何角色:

    curl -i \
        -H "X-Auth-Token:<retrieved_token>" \
        -H "Content-type: application/json" \
    http://192.168.4.33:5000/v3/domains/default/users/idm/roles
    

也许,这个请求会给你一个响应,比如:

{"links": {"self": "http://192.168.4.33:5000/v3/domains/default/users/idm/roles", "previous": null, "next": null}, "roles": []}

  1. 在这种情况下,您需要为该用户创建一个角色。要创建它,您需要为域中的role用户分配一个。为此,您需要检索要分配的。您可以通过发送以下请求来做到这一点:idmdefaultrole idrole

    curl -i \
        -H "X-Auth-Token:<retrieved_token>" \
        -H "Content-type: application/json" \
    http://192.168.4.33:5000/v3/roles
    

它将返回一个包含所有可用的 JSONroles及其ids.

  1. 将 a 分配给域中role的用户。有 6 个可用:成员、所有者、试用版、基本版、社区和管理员。作为主要管理员,我会选择. 所以最后,我们通过执行以下操作来分配角色:idmdefaultidmadmin idadmin id

    curl -s -X PUT \
        -H "X-Auth-Token:<retrieved_token>" \
        -H "Content-type: application/json" \
    http://192.168.4.33:5000/v3/domains/default/users/idm/roles/<role_id>
    

现在您可以重试第 1 步,如果一切正常,您应该能够启动 PEP 代理:

sudo node server.js

让我知道事情的后续!

于 2015-08-19T12:20:40.967 回答