График RBAC Credentials возвращается с ошибкой - PullRequest
0 голосов
/ 12 марта 2019

Я пытаюсь создать нового пользователя с библиотеками Azure Active Directory для Python , аутентификация пользователя с помощью класса UserPassCredentials выдает ошибку позиционного аргумента.Класс UserPassCredentials .Все параметры определены:

 credentials = UserPassCredentials(username, password, client_id, secret, resource)

Это ошибка:

TypeError: __init__() takes from 3 to 5 positional arguments but 6 were given

Здесь ровно 5 аргументов.Почему я продолжаю получать эту ошибку?

Я понимаю, что в API Azure AD Graph некоторые функции устарели, и рекомендуется использовать Microsoft Graph API.Мне просто нужна помощь, чтобы понять, почему возвращается эта ошибка.

Ответы [ 3 ]

0 голосов
/ 13 марта 2019

Во-первых, чтобы ответить на ваш вопрос по Python:

TypeError: __init__() takes from 3 to 5 positional arguments but 6 were given

Посмотрите документацию этого класса , подпись:

UserPassCredentials(username, password, client_id=None, secret=None, **kwargs)

Используя позиционный синтаксис, вам нужно как минимум 2 и максимум 4 (+ self, которые всегда учитываются для одного), поэтому сообщение верное «от 3 до 5». Когда вы передаете «resource» в вашем примере, вы передаете 6-й позиционный аргумент, который не учитывает сигнатуру Python (опять же, self считается за один!). Это не имеет ничего общего с Azure или SDK, это чистый Python:)

Теперь, чтобы решить вашу конкретную проблему, API-интерфейсу GraphRBAC требуется параметр ресурса, чтобы всегда был https://graph.windows.net. Вы не можете это изменить. Таким образом, минимальная конструкция будет:

credentials = UserPassCredentials(
        'user@domain.com',      # Your user
        'my_password',          # Your password
        resource="https://graph.windows.net"
)

Этот документ может помочь: https://docs.microsoft.com/python/api/overview/azure/activedirectory

Этого обычно достаточно для создания клиента. Если у вас есть еще вопросы, не стесняйтесь, чтобы открыть вопрос на Github: https://github.com/Azure/azure-sdk-for-python/issues

(я работаю в MS в команде Azure SDK для Python и на самом деле владею этим кодом:))

0 голосов
/ 19 марта 2019

Я решил использовать MS Graph API .Использование запросов и библиотек Adal сделало это работающим для меня

0 голосов
/ 13 марта 2019

Прежде всего, в предыдущей версии SDK ADAL еще не был доступен, и мы предоставили класс UserPassCredentials.Это считается устаревшим и больше не должно использоваться.Это не поддерживает 2FA.Но согласно моему более раннему опыту работы с этим классом, мы либо пропускаем указанную ниже комбинацию при создании объекта учетных данных

1) Имя пользователя, пароль, 2) Имя пользователя, Пароль, ресурс 3) Идентификатор клиента, секретный 4) Идентификатор клиента, secret и resource

Ресурс по умолчанию ('https://management.core.windows.net/'.)

примерно так:

return UserPassCredentials(

        config_data["username"],

        config_data["password"],

    ) 

UserPassCredentials(username, password, client_id=None, secret=None, **kwargs)

последний параметр - опция, которая может иметь следующие значения

Дополнительные kwargs могут включать в себя:

cloud_environment (msrestazure.azure_cloud.Cloud): целевая облачная среда

china (bool): настройка аутентификации для службы в Китае, по умолчанию «False»'.

tenant (str): альтернативный арендатор, по умолчанию «common».

resource (str): альтернативный ресурс аутентификации, по умолчанию «https://management.core.windows.net/'.

verify(bool): проверить безопасное соединение, по умолчанию 'True'.

timeout (int): тайм-аут запроса в секундах.

прокси (dict): протокол отображения словаря или протокол и имя хостана URL прокси.

кеш (adal.TokenCache): adal.TokenCache, см. Конфигурацию ADAL

Я предполагаю, что вы передаете правильные значения в параметре, также, пожалуйста, попробуйте передать комбинацию, которую я упомянул вышеи посмотрите, работает ли он.

Надеюсь, это поможет.

...