0

我试图从Python客户端应用程序中从Azure AD获取令牌。我希望用户使用用户名和密码进行无缝验证(client_id/secret将嵌入到应用程序中)。我注册了我的应用程序,并给它的所有权限,并在新的门户网站打出了“授予权限”按钮,根据这个帖子:管理员尚未同意使用该应用程序 - Azure AD

The user or administrator has not consented to use the application - Send an interactive authorization request for this user and resource

我发送一个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,获得令牌。

+0

你可以用Graph Explorer检查你的oauth2PermissionGrants吗?示例:https://graphexplorer.cloudapp.net/Home/Index/DemoCompany?UrlRequest=GET&text=https%3A%2F%2Fgraph.windows.net%2Fgraphdir1.onmicrosoft.com%2Foauth2PermissionGrants。查找您的应用的服务主体是否已被授予适当的资源访问权限。 – juunas

+0

所以我不是100%确定我在这里看到什么,但是当我放入“https://graph.windows.net/{my_dir}/oauth2PermissionGrants时,我看到一个包含3个服务主体的”值“数组其中每一个都有一个clientID,其中没有一个与我的应用的client_id相对应,猜测这可能是罪魁祸首?如果是这样,我仍然不知道如何授予它。 – Progger

+0

客户端ID实际上是对象ID服务主体:)所以,首先从servicePrincipals端点找到你的服务主体 – juunas

回答

2

根据您的评论:

我收到的消息说,做一个互动的请求,但是这正是我想避免,因为这是一个Python应用程序没有web浏览器和我努力避免复杂性。

我想你想构建一个守护进程应用程序或仅与Azure AD集成的应用程序应用程序。一般介绍可以参考https://graph.microsoft.io/en-us/docs/authorization/app_only

此外,您可以利用ADAL for Python轻松实现此功能。另外,您可以参考client_credentials_sample.py快速入门。

+0

因此,这让我立即得到了一个令牌,我可以使用它从Graph获取用户的信息。唯一的问题是我无法弄清楚如何根据Graph验证用户的凭据。这可能吗?理想情况下,我想要使用用户的信用而不是client_id/secret获取令牌,但不确定这是否可能。 – Progger

+0

如果您不想**交互式请求**,恐怕您需要定制一些额外的逻辑来实现此功能。您可以利用图表API来匹配用户信息和他的证书。 E.G https://graph.microsoft.io/en-us/docs/api-reference/v1.0/api/user_get –

+0

嗨,@progger,你有任何更新吗?你解决了你的问题吗? –

0

您应该尝试以管理员身份登录,以便能够同意在租户上使用该应用程序。

+0

所有这些都是使用管理员帐户完成的,所以很不幸没有帮助。 – Progger

相关问题