我对PEP代理文件有疑问。
我的梯形失真校正服务正在192.168.4.33:5000上运行。
我的Horizo​​n Service在192.168.4.33:443上运行。

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

但是我没有得到的是我应该用什么代替config.account_host?
在用于keyrock管理器的mysql数据库内部,有一个具有“ idm”密码的“ idm”用户,并且我通过Identity Manager上的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"}}

最佳答案

首先,我不会在您的config.account_host上键入端口,因为在该端口上不需要此端口,但这不会干扰操作。

我的猜测是,您正在使用自己的KeyRock FIWARE Identity Manager和默认角色设置。

如果您检查代码,PEP代理将针对KeyRock发送Domain Scoped request,与Keystone v3 API中的立场相同。

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


尝试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请求。


检查用户在此域中是否具有任何角色。为此,您将需要使用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


使用该令牌,我们将使用之前选择的用户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": []}


在这种情况下,您将需要为该用户创建一个角色。要创建它,您需要将role关联到idm域中的用户default。为此,您将需要检索要分配的role idrole。您可以通过发送以下请求来执行此操作:

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



它将返回带有所有可用的roles及其ids的JSON。


role域中为用户idm分配default。有6个可用选项:成员,所有者,试用版,基本,社区和管理员。由于idm是主要管理员,因此我选择了admin id。因此,最后,通过admin 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


让我知道事情的后续!

10-01 11:19