无法以编程方式用户身份验证

时间:2017-03-23 08:13:21

标签: python azure authentication 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)

这适用于一个租户中的用户,但对于来自其他租户的用户而言并不适用,但有一个奇怪的错误:

  

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

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

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

1 个答案:

答案 0 :(得分:4)

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

还有一些问题/副作用:

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

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

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