我试图从Python客户端应用程序中从Azure AD获取令牌。我希望用户使用用户名和密码进行无缝验证(client_id/secret将嵌入到应用程序中)。我注册了我的应用程序,并给它的所有权限,并在新的门户网站打出了“授予权限”按钮,根据这个帖子:管理员尚未同意使用该应用程序 - Azure AD
我发送一个HTTP POST到:
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.
同样,我的目标:
用户输入用户名/密码,没有别的。应用程序发送用户/通过/ client_id/client_secret,获得令牌。
你可以用Graph Explorer检查你的oauth2PermissionGrants吗?示例:https://graphexplorer.cloudapp.net/Home/Index/DemoCompany?UrlRequest=GET&text=https%3A%2F%2Fgraph.windows.net%2Fgraphdir1.onmicrosoft.com%2Foauth2PermissionGrants。查找您的应用的服务主体是否已被授予适当的资源访问权限。 – juunas
所以我不是100%确定我在这里看到什么,但是当我放入“https://graph.windows.net/{my_dir}/oauth2PermissionGrants时,我看到一个包含3个服务主体的”值“数组其中每一个都有一个clientID,其中没有一个与我的应用的client_id相对应,猜测这可能是罪魁祸首?如果是这样,我仍然不知道如何授予它。 – Progger
客户端ID实际上是对象ID服务主体:)所以,首先从servicePrincipals端点找到你的服务主体 – juunas