首页 文章

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

提问于
浏览
0

我们想要使用FIWARE IdM,包括Keystone和Horizon . 特别是在注册期间我们想要

  • 创建用户

  • 将该用户添加到组织

  • 授权用户申请

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

由于KeyRock Web界面创建了 Cloud 组织,西班牙等地区的社区用户,我决定尝试使用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满意?

1 回答

  • 1

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

    我自己确保这应该通过遵循相同的流程来解决您的问题(请注意 X-Auth-Token 标头的值是 admin 标记, Host 标头应该是您的Keystone endpoints ):

    • Register a user 通过SCIM API:
    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"
      ]
    }
    
    • Authorize the newly created user 为应用程序 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
    

    这反过来又返回以下成功响应:

    HTTP/1.1 204 No Content
    Vary: X-Auth-Token
    Content-Length: 0
    
    • 在此之后,我终于能够按照您的要求 obtain a resource owner OAuth2 tokenAuthorization Headers 包含 app1 的OAuth2凭证) .
    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
    

    并且最后返回令牌:

    HTTP/1.0 200 OK
    Vary: Accept-Language, Cookie
    Content-Type: application/json
    
    {
      "access_token": "JYjCV2H8QNakRPUqqdoAHZmpmD0vgQ",
      "token_type": "Bearer",
      "expires_in": 3600,
      "refresh_token": "snnS8djsYw62aUtl9Szk9BBqti36jF"
    }
    

相关问题