2016-05-07 2 views
0

Мы хотим использовать FIWARE IdM, как Keystone, так и Horizon. В частности во время регистрации мы хотимОшибка в программном обеспечении KeyRock SCIM API: _check_allowed_to_get_and_assign() получил неожиданный аргумент ключевого слова 'userName'

  • создать пользователя
  • добавить пользователя в организации
  • авторизовать пользователя для приложения

Мы установили Keystone и горизонт с использованием новейших Изображение докеры KeyRock на концентраторе докера (https://hub.docker.com/r/fiware/idm/).

Поскольку KeyRock веб-интерфейс создает облачные организации, пользователи сообщества в регионах, как Испания и т.д. я решил попробовать использовать API SCIM для создания и авторизации пользователей:

Примечание: Документы, API SCIM (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/

Допустим, у нас есть приложение (SCIM потребителей) с application_id = app1. Это приложение создается с использованием интерфейса Horizon или с использованием

POST /v3/OS-OAUTH2/consumers 

звонок. Я не знаю разницы между двумя способами создания приложения, хотя я еще не пробовал последнего. Это одноразовая операция, поэтому мы использовали веб-интерфейс для создания приложения и связанной с ним роли.

поэтому у нас есть роль для приложения = 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 

Но это спорный вопрос, из-за ошибки выше.

Вход в пользовательский интерфейс KeyRock с помощью user1 дает ошибку: «У вас нет прав для каких-либо проектов». Я предполагаю, что это связано с тем, что user1 не разрешен для организации. user1 невидим для других пользователей или администратора в пользовательском интерфейсе KeyRock, поэтому я не могу назначить необходимые авторизации.

Любые идеи кто-нибудь? Какие роли у пользователя1 еще нужно иметь и как их назначить, чтобы KeyRock был удовлетворен?

+0

Я Робин, мы все еще работаем над этим, чтобы предоставить вам решение. –

+0

Прошел месяц с моего вопроса. Любые обновления или сведения об обходных методах? – Robin

+0

Теперь прошло два месяца, и мы по-прежнему не в состоянии программно создать пользователя, использующего API SCIM. Кто-нибудь работает над этим? Должны ли мы отказаться от API SCIM? – Robin

ответ

1

После глубокого изучения вашей проблемы выяснилось, что это может быть связано с отсутствием новой организации по умолчанию для пользователя по умолчанию. Несмотря на то, что запросы конечной точки пользователей SCIM API должны создавать только пользователей, несомненно, что пользователи KeyRock имеют внутреннюю организацию по умолчанию, которая не может быть видна извне. Так как имеет смысл создавать эту организацию автоматически, мы просто сделали несколько улучшений в контроллере SCIM в KeyRock, которые берут на себя ответственность за это. Вы можете взглянуть на изменения в our GitHub repository.

я сам убедился, что это должно решить проблему, следуя тот же поток (обратите внимание, что значение заголовка 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": "[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. Авторизуйте вновь созданного пользователя для приложения 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 
    
  3. После этого я наконец смог o btain владелец ресурса OAuth2 токен, как вы просили (заголовок 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&[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" 
    } 
    
Смежные вопросы