提问者:小点点

Python请求-Azure图形API身份验证


我正在尝试使用Python请求库访问Azure AD Graph API。我的步骤是首先获取授权码。然后,使用授权代码,我请求一个访问令牌/刷新令牌,最后查询API。

当我浏览浏览器时,我可以得到我的授权码。我把它复制过来拿到通行证。但是,我无法对Python脚本执行同样的操作。我被卡在了获取授权码的地方。

我的脚本返回200的响应代码,但响应头不包括该字段。我希望新的URL和代码会出现在响应头中。我还希望回复代码为301。

有人知道为什么我的响应标题没有验证码吗?另外,给定auth代码,我将如何使用Python将其提取出来以获取访问/刷新令牌?

我的代码如下:

import requests

s = requests.Session()
s.auth = (USERNAME, PASSWORD)

# Authorize URL
authorize_url = 'https://login.microsoftonline.com/%s/oauth2/authorize' % TENANT_ID
# Token endpoint.
token_url = 'https://login.microsoftonline.com/%s/oauth2/token' % TENANT_ID

payload = { 'response_type': 'code',
            'client_id': CLIENT_ID,
            'redirect_uri': REDIRECT_URI
          }

request = s.get(authorize_url, json=payload, allow_redirects=True)
print request.headers

共2个答案

匿名用户

这篇博文展示了如何使用Python对Azure REST API进行正确身份验证:http://blogs.msdn.com/b/shwetasblogs/archive/2015/10/21/authentication-with-azure-ad-for-azure-resource-manager-the-multitenant-app-approach.aspx.MSDN文档(不特定于Python)如下所示:https://msdn.microsoft.com/en-us/library/azure/dn790557.aspx.

匿名用户

看起来您正在通过python请求实现授权代码授权流。如流程所示,authorize\u url请求的响应将重定向到广告租户的SSO页面。用户登录后,它将重定向到redirect\u uri中设置的位置,并将code作为URL参数。例如,http://localhost/?code=AAABAAAAiL...
而且您的代码似乎不能简单地显示允许JavaScript的html页面,因此它不会重定向到登录页面。

因此,您可以参考@theadriangreen的建议,使用python Web服务器应用程序来实现。

否则,可以参考适用于Python的Microsoft Azure Active Directory身份验证库(ADAL),这是一个用于从AD获取访问令牌的python包,可以轻松集成到Python应用程序中。