2016-05-07 22 views
0

我們想要使用Keystone和Horizo​​n的FIWARE IdM。特別是在註冊過程中,我們要Fiware KeyRock SCIM API錯誤:_check_allowed_to_get_and_assign()得到了一個意外的關鍵字參數'userName'

我們已經採用了最新的安裝梯形校正和地平線的應用程序創建一個用戶

  • 將該用戶添加到一個組織
  • 授權用戶碼頭集線器上的KeyRock碼頭圖像(https://hub.docker.com/r/fiware/idm/)。

    因爲KeyRock Web界面中,如西班牙等地區建立雲組織,社區用戶我決定嘗試使用SCIM API來創建和授權用戶:

    :本SCIM API文檔(http://docs.keyrock.apiary.io/#reference/scim-2.0)意味着SCIM調用位於KeyRock服務器端口上,但它們在Keystone服務器端口上可用。如果提到http://[keystone服務器]/V3 /中/ OS-V2 SCIM /用戶/代替http://keyrock/v3/OS-SCIM/v2/Users/

    比方說,我們有APPLICATION_ID = APP1應用程序(SCIM消費者)的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" 
        } 
    } 
    

    下一步將是使用

    POST [KeyStone server]/oauth2/token 
    

    通過KeyRock以獲得資源所有者令牌但是,這是因爲,上述錯誤的實際意義。

    使用user1登錄到KeyRock用戶界面時出現錯誤: 「您沒有獲得任何項目的授權。」我認爲這是因爲user1未被授權給組織。 user1對其他用戶或KeyRock用戶界面中的管理員不可見,所以我無法分配必要的授權。

    任何想法的人? user1還需要哪些角色以及如何分配它們以使KeyRock滿意?

  • +0

    我羅賓,我們還在這方面的工作,爲您提供解決方案。 –

    +0

    我的問題已經過去了一個月。任何更新或對解決方法的見解? – Robin

    +0

    現在已經兩個月了,我們仍然無法以編程方式使用SCIM API創建用戶。有人正在爲此工作?我們應該放棄SCIM API嗎? – Robin

    回答

    1

    在仔細研究了您的問題後,結果可能與缺少新用戶的默認組織有關。儘管對SCIM API用戶端點的請求只能創建用戶,但肯定KeyRock用戶在內部有一個默認的組織,這是從外部看不到的。由於自動創建該組織也很有意義,因此我們在KeyRock的SCIM控制器中進行了一些改進,負責此操作。您可以查看our GitHub repository中的更改。

    我本人確信,這應該解決您的問題,按照同樣的流程(注意X-Auth-Token頭的值是一個管理令牌,而且Host頭應該是你的梯形終點):

    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": "[email protected]", 
          "password": "foobar" 
      } 
      

      它返回以下響應:

      HTTP/1.1 201 Created 
      Vary: X-Auth-Token 
      Content-Type: application/json 
      Content-Length: 276 
      
      { 
          "userName": "[email protected]", 
          "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&[email protected]&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" 
      } 
      
    相關問題