我们想要使用FIWARE IdM,包括Keystone和Horizon。特别是在注册期间我们想要
我们使用Docker hub(https://hub.docker.com/r/fiware/idm/)上的最新KeyRock泊坞窗映像安装了Keystone和Horizon。
由于KeyRock网络界面创建了云组织,西班牙等地区的社区用户,我决定尝试使用SCIM API来创建和授权用户:
注意:SCIM API文档(http://docs.keyrock.apiary.io/#reference/scim-2.0)暗示SCIM调用位于KeyRock服务器端口上,但它们在Keystone服务器端口上可用。如果提到http://[keystone server] / v3 / OS-SCIM / v2 / Users /而不是http://keyrock/v3/OS-SCIM/v2/Users/
,SCIM文档会更清楚假设我们有一个application_id = app1的应用程序(SCIM使用者)。此应用程序是使用Horizon前端或使用
创建的 POST /v3/OS-OAUTH2/consumers
呼叫。我不知道创建应用程序的两种方法之间的区别,尽管我还没有尝试过后者。这是一次性操作,因此我们使用Web界面来创建应用程序和关联角色。
所以我们有一个application = role1
的角色我们使用SCIM创建用户
POST /v3/OS-SCIM/v2/Users/
产生user_id = user1
当我尝试使用
授权他申请时PUT /v3/OS-ROLES/users/user1/applications/app1/roles/role1
我收到以下错误:
{
"error": {
"message": "_check_allowed_to_get_and_assign() got an unexpected keyword argument 'userName'",
"code": 400,
"title": "Bad Request"
}
}
下一步是使用
通过KeyRock获取资源所有者令牌POST [KeyStone server]/oauth2/token
但由于上述错误,这是没有意义的。
使用user1登录KeyRock用户界面会出现错误: "您未获得任何项目的授权。"我认为这是因为user1未获得组织的授权。 user1对其他用户或KeyRock用户界面中的管理员是不可见的,因此我无法分配必要的授权。
任何想法? user1仍需要具备哪些角色以及如何分配它们以满足KeyRock?
答案 0 :(得分:1)
在深入研究您的问题之后,事实证明它可能与缺少新用户的默认组织有关。尽管对SCIM API用户端点的请求应该只创建用户,但可以肯定KeyRock用户在内部有一个默认组织,从外部看不到。由于自动创建这个组织也是有意义的,我们只是在KeyRock的SCIM控制器上做了一些改进,负责这个。您可以查看our GitHub repository中的更改。
我自己确保这可以通过遵循相同的流程来解决您的问题(请注意X-Auth-Token
标头的值是 admin 标记并且{{1} } header应该是你的Keystone端点):
通过SCIM API注册用户:
Host
返回以下响应:
POST /v3/OS-SCIM/v2/Users HTTP/1.1
Host: localhost:5000
Accept: */*
Content-Type: application/json
X-Auth-Token: 6bd914d9976c448a98b83ccaf5931c4e
Content-Length: 55
{
"userName": "foo@foo.bar",
"password": "foobar"
}
为应用HTTP/1.1 201 Created
Vary: X-Auth-Token
Content-Type: application/json
Content-Length: 276
{
"userName": "foo@foo.bar",
"urn:scim:schemas:extension:keystone:2.0": {
"domain_id": "default",
"default_project_id": "c590cea2b37c4f1c9ca94a015837cde9"
},
"active": true,
"id": "foo-foo-bar",
"schemas": [
"urn:scim:schemas:core:2.0",
"urn:scim:schemas:extension:keystone:2.0"
]
}
授予新创建的用户,为其指定角色app1
:
role1
反过来又返回以下成功响应:
PUT /v3/OS-ROLES/users/foo-foo-bar/applications/app1/roles/role1 HTTP/1.1
Host: localhost:5000
Accept: */*
Content-Type: application/json
X-Auth-Token: fd817b31444141a7a8a15d6d6afd2078
在此之后,我终于能够按照您的要求获取资源所有者OAuth2令牌(HTTP/1.1 204 No Content
Vary: X-Auth-Token
Content-Length: 0
标头包含Authorization
的OAuth2凭据)
app1
终于返回了令牌:
POST /oauth2/token HTTP/1.1
Host: localhost:8000
Accept: */*
Authorization: Basic 12345678abcdefgh=
Content-Type: application/x-www-form-urlencoded
Content-Length: 56
grant_type=password&username=foo@foo.bar&password=foobar