0

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

当我通过浏览器时,我可以获得我的授权码。我复制它以获取访问令牌。但是,我无法对 Python 脚本做同样的事情。我被困在获得授权码的部分。

我的脚本返回 200 的响应代码,但响应标头不包含该字段。我希望带有代码的新 URL 位于响应标头中。我还期望响应代码为 301。

有谁知道为什么我的响应标头没有验证码?此外,给定身份验证代码,我将如何将其拉出然后使用 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
4

2 回答 2

1

看起来您正在通过 python 请求使用授权代码授予流程来实现。如流程所示,请求的响应authorize_url将重定向到您的 AD 租户的 SSO 页面。在您的用户登录后,它将重定向到 作为 URL 参数设置redirect_uri的位置。codeEGhttp://localhost/?code=AAABAAAAiL...
而且您的代码似乎不能简单地显示允许使用 JavaScript 的 html 页面,因此它不会重定向到页面上的登录。

所以可以参考@theadriangreen 的建议用python web server 应用来实现。

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

于 2015-12-01T08:06:53.967 回答
0

此博客文章展示了如何使用 Python 对 Azure REST API 进行正确身份验证:http: //blogs.msdn.com/b/shwetasblogs/archive/2015/10/21/authentication-with-azure-ad-for-azure-资源管理器-多租户应用程序-approach.aspx。不是 Python 特定的 MSDN 文档在这里:https ://msdn.microsoft.com/en-us/library/azure/dn790557.aspx 。

于 2015-12-01T01:00:08.303 回答