我正在尝试从Python客户端应用程序中获取Azure AD中的令牌。我希望用户只使用用户名和密码进行无缝身份验证(client_id / secret将嵌入到应用程序中)。我注册了我的应用程序,并给予了所有权限,并根据这篇文章点击了新门户网站中的“授予权限”按钮:
我发送一篇http帖子到:
https://login.microsoftonline.com/{tenant_id}/oauth2/token
包含以下数据:
headers = {
"Content-Type": "application/x-www-form-urlencoded"
}
body = "resource={0}&grant_type=password&username={1}&password={2}&client_id={3}&client_secret={4}&scope=openid".format(app_id_uri,user,password,client_id,client_secret)
无论我尝试什么,我似乎无法克服这个错误:
b'{"error":"invalid_grant","error_description":"AADSTS65001: The user or administrator has not consented to use the application with ID \'078c1175-e384-4ac7-9116-efbebda7ccc2\'. Send an interactive authorization request for this user and resource.
再次,我的目标:
用户输入用户/通行证,没有别的。 App发送user / pass / client_id / client_secret,获取令牌。
答案 0 :(得分:2)
根据你的评论:
我收到的消息说要做一个交互式请求,但这正是我试图避免的,因为这是一个没有网络浏览器的python应用程序,我试图避免复杂性
我认为您要构建一个守护程序应用程序或仅与Azure AD集成的应用程序应用程序。您可以参考https://graph.microsoft.io/en-us/docs/authorization/app_only进行一般性介绍。
此外,您可以轻松利用ADAL for Python来实现此功能。此外,您可以参考client_credentials_sample.py快速入门。
答案 1 :(得分:0)
您应该尝试以管理员身份登录,以便能够同意在您的租户上使用该应用程序。