我对PEP代理文件有疑问。
我的梯形失真校正服务正在192.168.4.33:5000上运行。
我的Horizon 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 id
的role
。您可以通过发送以下请求来执行此操作: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
让我知道事情的后续!