簡體   English   中英

Fiware KeyRock SCIM API錯誤:_check_allowed_to_get_and_assign()獲得了意外的關鍵字參數'userName'

[英]Fiware KeyRock SCIM API bug: _check_allowed_to_get_and_assign() got an unexpected keyword argument 'userName'

我們想要使用Keystone和Horizo​​n的FIWARE IDM。 特別是在注冊過程中,我們希望

  • 創建一個用戶
  • 將該用戶添加到組織中
  • 授權用戶申請

我們已經在docker hub( https://hub.docker.com/r/fiware/idm/ )上使用最新的KeyRock docker映像安裝了Keystone和Horizo​​n。

由於KeyRock Web界面創建了Cloud組織,因此西班牙等地區的社區用戶決定嘗試使用SCIM API創建和授權用戶:

注意 :SCIM API文檔( http://docs.keyrock.apiary.io/#reference/scim-2.0 )暗示SCIM調用在KeyRock服務器端口上,但是在Keystone服務器端口上可用。 如果SCIM文檔中提到的是http:// [keystone服務器] / v3 / OS-SCIM / v2 / Users /而不是http:// keyrock / v3 / OS-SCIM / v2 / Users /

假設我們有一個帶有application_id = app1的應用程序(SCIM使用者)。 此應用程序是使用Horizo​​n前端或使用

    POST /v3/OS-OAUTH2/consumers 

呼叫。 盡管我還沒有嘗試過創建應用程序的兩種方式,但是我還沒有意識到這兩種方法之間的差異。 這是一次操作,因此我們使用Web界面來創建應用程序和相關角色。

所以我們對應用程序有一個角色= 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用戶界面中的admin不可見,因此我無法分配必要的授權。

有任何想法嗎? user1仍然需要擁有哪些角色,以及如何分配它們才能滿足KeyRock的要求?

在深入研究您的問題之后,事實證明這可能與缺少新用戶的默認組織有關 即使對SCIM API用戶終結點的請求應僅創建用戶,但可以肯定KeyRock用戶在內部具有默認組織,這從外部看不到。 由於也可以自動創建該組織,因此我們在KeyRock的SCIM控制器中做了一些改進,以進行管理。 您可以查看GitHub存儲庫中的更改。

我本人通過遵循相同的流程來確保這可以解決您的問題(請注意, X-Auth-Token標頭的值是一個管理令牌,而Host標頭應該是您的Keystone端點):

  1. 通過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" ] } 
  2. 通過為他們分配角色role1來為應用程序app1 授權新創建的用戶

     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 
  3. 之后,我終於能夠按照您的請求獲取資源所有者OAuth2令牌Authorization標頭包含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" } 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM