我对PEP代理文件有疑问。 我的keystone服务运行在192.168.4.33:5000。 我的视界服务运行在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"}}
答案 0 :(得分:4)
首先,我不会在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
的{{1}}。您可以通过发送以下请求来执行此操作:
role
它将返回包含所有可用curl -i \
-H "X-Auth-Token:<retrieved_token>" \
-H "Content-type: application/json" \
http://192.168.4.33:5000/v3/roles
及其roles
的JSON。
将ids
分配给role
域中的用户idm
。有6个可用:成员,所有者,试用版,基本,社区和管理员。由于default
是主要管理员,我会选择idm
。最后,使用admin id
,我们通过执行以下操作来分配角色:
admin id
现在您可以再次尝试第1步,如果一切正常,您应该能够启动PEP代理:
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>
让我知道它是怎么回事!