Fiware KeyRock SCIM API错误:_check_allowed_to_get_and_assign()获得了一个意外的关键字参数' userName'

时间:2016-05-07 22:46:32

标签: fiware

我们想要使用FIWARE IdM,包括Keystone和Horizo​​n。特别是在注册期间我们想要

  • 创建用户
  • 将该用户添加到组织
  • 授权用户申请

我们使用Docker hub(https://hub.docker.com/r/fiware/idm/)上的最新KeyRock泊坞窗映像安装了Keystone和Horizo​​n。

由于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使用者)。此应用程序是使用Horizo​​n前端或使用

创建的
    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?

1 个答案:

答案 0 :(得分:1)

在深入研究您的问题之后,事实证明它可能与缺少新用户的默认组织有关。尽管对SCIM API用户端点的请求应该只创建用户,但可以肯定KeyRock用户在内部有一个默认组织,从外部看不到。由于自动创建这个组织也是有意义的,我们只是在KeyRock的SCIM控制器上做了一些改进,负责这个。您可以查看our GitHub repository中的更改。

我自己确保这可以通过遵循相同的流程来解决您的问题(请注意X-Auth-Token标头的值是 admin 标记并且{{1} } header应该是你的Keystone端点):

  1. 通过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"
    }
    
  2. 为应用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
    
  3. 在此之后,我终于能够按照您的要求获取资源所有者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