无法以编程身份验证为用户

4c7*_*b41 2 python authentication azure azure-active-directory adal

我正在使用以下代码(python,但这并不重要,使用powershell和invoke-webrequest获得相同的结果):

from msrestazure.azure_active_directory import UserPassCredentials
username = '%username%'
password = '%password%'
client_id = '{Azure AD Application GUID}'
secret_id = '{Azure AD Application secret}'
credentials = UserPassCredentials(username, password, client_id, secret_id)
Run Code Online (Sandbox Code Playgroud)

这适用于一个租户中的用户,但不适用于另一个有奇怪错误的租户中的用户:

msrest.exceptions.AuthenticationError:,InvalidGrantError:(invalid_grant)AADSTS70002:验证凭据时出错。AADSTS50126:无效的用户名或密码

我可以使用具有相同凭据的门户网站登录。有问题的租户正在使用AAD Sync和SSO,这会干扰吗?

如果是,如何在这样的Azure AD中为用户获取令牌?

ast*_*kov 5

我非常确定理解在尝试使用Azure AD登录时使用资源所有者密码凭据授予的严重安全隐患。

它也有一些问题/副作用:

  • 如果您的帐户启用了MFA /条件访问,那么您将不会使用资源所有者密码凭据授予进行登录。期。不可能。
  • 如果您的域是federated(例如您的情况),您将无法登录。如果您也进行密码哈希同步,则有可能登录,但是我不确定这是否有帮助。

最后,通过验证后端和非用户交互过程的最佳方法是Service Principal

请查看以下文档来源,以了解有关Azure AD中服务主体以及如何使用服务主体进行身份验证的更多信息: