我正在尝试使用Azure Active Directory libraries for 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个论点。为什么我一直收到这个错误?
我了解Azure AD Graph API将弃用某些功能,建议使用Microsoft Graph API。我只是需要帮助理解为什么它会返回此错误。
首先,在SDK的早期版本中,ADAL尚不可用,我们提供了UserPassCredentials类。这被认为已弃用,不应再使用。这不支持2FA。但是根据我之前对这个类的经验,我们要么在创建凭证对象时传递下面的组合
1)用户名,密码,2)用户名,密码,资源3)客户端ID,秘密4)客户端ID,秘密和资源
资源是默认的('https://management.core.windows.net/'。)
这样的事情:
return UserPassCredentials(
config_data["username"],
config_data["password"],
)
UserPassCredentials(username, password, client_id=None, secret=None, **kwargs)
last param是可以具有以下值的选项
可选的kwargs可能包括:
cloud_environment(msrestazure.azure_cloud.Cloud):一个有针对性的云环境
china(bool):为基于中国的服务配置auth,默认为'False'。
租户(str):替代租户,默认为“普通”。
resource(str):备用身份验证资源,默认为'https://management.core.windows.net/'。
verify(bool):验证安全连接,默认为'True'。
timeout(int):请求超时(以秒为单位)。
proxies(dict):字典映射协议或协议和主机名到代理的URL。
cache(adal.TokenCache):adal.TokenCache,请参阅ADAL配置
我假设,你正在传递正确的值,也请尝试通过我上面提到的组合,看看它是否有效。
希望能帮助到你。
首先,回答你的Python问题:
TypeError: __init__() takes from 3 to 5 positional arguments but 6 were given
看看documentation of this class,签名是:
UserPassCredentials(username, password, client_id=None, secret=None, **kwargs)
使用位置语法,您需要至少2个,最多4个(+ self总是计为一个),因此消息是“从3到5”。当您在示例中传递“resource”时,您传递的是第6个位置参数,该参数不符合Python签名(同样,自我计数为1!)。这与Azure或SDK无关,这是纯Python :)
现在,为了解决您的特定问题,GraphRBAC API要求资源参数始终为https://graph.windows.net
。你不能改变它。所以最小的结构将是:
credentials = UserPassCredentials(
'[email protected]', # 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
(我在Azure SDK for Python团队中的MS工作,并实际拥有此代码:))
我决定使用MS Graph API。使用请求和adal库让我有用