Azure ADAL для Python: возникла проблема с методомAcquire_token_with_username_password

Я пытаюсь получить токен доступа, используя идентификатор пользователя и пароль Azure. Сначала я попытался использовать следующий блок кода Python

import adal
context = adal.AuthenticationContext(AUTHORITY)
token = context.acquire_token_with_client_credentials(
    "https://management.azure.com/",
    CLIENT_ID,
    CLIENT_SECRET)

Это возвращает токен без каких-либо проблем. Я следую примеру из https://github.com/AzureAD/azure-activedirectory-library-for-python для получения токена с использованием имени пользователя и пароля, а блок кода выглядит следующим образом

token2 = context.acquire_token_with_username_password("https://management.azure.com/",USER_NAME,PASSWORD,CLIENT_ID)

В этом случае токен не возвращается, вместо этого возвращается следующий ответ.

File "F:\All_Python\Python_Setup\Python27\lib\site-packages\adal\authentication_context.py", line 145, in acquire_token_with_username_password
    return self._acquire_token(token_func)
  File "F:\All_Python\Python_Setup\Python27\lib\site-packages\adal\authentication_context.py", line 109, in _acquire_token
    return token_func(self)
  File "F:\All_Python\Python_Setup\Python27\lib\site-packages\adal\authentication_context.py", line 143, in token_func
    return token_request.get_token_with_username_password(username, password)
  File "F:\All_Python\Python_Setup\Python27\lib\site-packages\adal\token_request.py", line 286, in get_token_with_username_password
    token = self._get_token_username_password_federated(username, password)
  File "F:\All_Python\Python_Setup\Python27\lib\site-packages\adal\token_request.py", line 252, in _get_token_username_password_federated
    username, password)
  File "F:\All_Python\Python_Setup\Python27\lib\site-packages\adal\token_request.py", line 211, in _perform_username_password_for_access_token_exchange
    username, password)
  File "F:\All_Python\Python_Setup\Python27\lib\site-packages\adal\token_request.py", line 198, in _perform_wstrust_exchange
    result = wstrust.acquire_token(username, password)
  File "F:\All_Python\Python_Setup\Python27\lib\site-packages\adal\wstrust_request.py", line 160, in acquire_token
    raise AdalError(return_error_string, error_response)
adal.adal_error.AdalError: WS-Trust RST request returned http error: 500 and server response: <s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing" xmlns:u="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"><s:Header><a:Action s:mustUnderstand="1">http://www.w3.org/2005/08/addressing/soap/fault</a:Action><o:Security s:mustUnderstand="1" xmlns:o="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"><u:Timestamp u:Id="_0"><u:Created>2017-06-07T12:12:56.567Z</u:Created><u:Expires>2017-06-07T12:17:56.567Z</u:Expires></u:Timestamp></o:Security></s:Header><s:Body><s:Fault><s:Code><s:Value>s:Sender</s:Value><s:Subcode><s:Value xmlns:a="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">a:FailedAuthentication</s:Value></s:Subcode></s:Code><s:Reason><s:Text xml:lang="en-US">ID3242: The security token could not be authenticated or authorized.</s:Text></s:Reason></s:Fault></s:Body></s:Envelope>

Process finished with exit code 1

Если у кого-нибудь есть идеи по этому поводу, пожалуйста, дайте мне знать.


person Soumen    schedule 07.06.2017    source источник
comment
В общедоступной среде Azure с использованием имени пользователя и пароля вашим ПРАВОМ ПРАВА может быть login.microsoftonline.com/common. Не могли бы вы иначе поделиться своим авторитетом? Также RESOURCE должен management.core.windows.net   -  person Laurent Mazuel    schedule 08.06.2017
comment
@LaurentMazuel Ресурс https://management.core.windows.net предназначен для управления службами Azure, а ресурс https://management.azure.com — для управления ресурсами Azure.   -  person Peter Pan    schedule 08.06.2017
comment
Токены, выпущенные для management.core.windows.net, также подходят для management.azure.com. Попробуйте.   -  person evilSnobu    schedule 08.06.2017


Ответы (1)


Согласно информации стека ошибок, по моему опыту, из-за того, что ошибка возникает из-за метода _get_token_username_password_federated и кода ошибки 500 для запроса WS-Trust RST, кажется, что пользователь/пароль, который вы использовали для получения токена, не создан в Azure AD вашего приложения зарегистрировано, но выглядит так, как будто оно создано в федеративной AD.

Пожалуйста, попробуйте сделать два способа ниже для проверки проблемы.

  1. Создайте нового пользователя в Azure AD вашего приложения, зарегистрированного на портале Azure, с вашей учетной записью администратора, а затем используйте нового пользователя/пароль для получения токена.
  2. Проверьте конфигурацию Azure AD, чтобы убедиться, что развернутые службы федерации Active Directory и текущее использование/пароль созданы в федеративном экземпляре AD.
person Peter Pan    schedule 08.06.2017