[英]Fiware KeyRock SCIM API bug: _check_allowed_to_get_and_assign() got an unexpected keyword argument 'userName'
我們想要使用Keystone和Horizon的FIWARE IDM。 特別是在注冊過程中,我們希望
我們已經在docker hub( https://hub.docker.com/r/fiware/idm/ )上使用最新的KeyRock docker映像安裝了Keystone和Horizon。
由於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使用者)。 此應用程序是使用Horizon前端或使用
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端點):
通過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" ] }
通過為他們分配角色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
之后,我終於能夠按照您的請求獲取資源所有者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.