Microsoft通过Oauth2登录返回状态代码200而不是302

时间:2018-04-03 17:16:16

标签: python azure oauth-2.0 python-requests odata

当我以编程方式遵循协议(python2和请求)时,Oauth2身份验证不起作用。但是当我使用浏览器时,它可以正常工作。我的目的是从重定向的URL中检索授权代码,以生成访问令牌。

我应该在标题中添加一些内容以允许重定向吗?

import requests
uri = https://login.microsoftonline.com/0000-0000-0000-0000/oauth2/authorize?response_type=codel&client_id=0000-0000-0000-0000-0000&response_mode=query&resource=https%3A%2F%2Fwww.foo.com%2F&redirect_uri=http%3A%2F%2Flocalhost:80%2F
r = requests.get(uri)
print r.url
print r.status_code
print r.history

状态代码为200但我希望302状态和结果网址如下:localhost:80/?code=mycode&state=mystate&session_state=thesessionstate

最好的问候。

2 个答案:

答案 0 :(得分:0)

为什么你会期待302?这也需要你传入会话cookie。

它返回200 OK,因为响应包含登录屏幕。

当你有这样的脚本时,你可能应该使用Client Credentials流程(使用应用程序权限):https://docs.microsoft.com/en-us/azure/active-directory/develop/active-directory-protocols-oauth-service-to-service

另一个选项是设备代码流程,我在我的博客中描述:https://joonasw.net/view/device-code-flow

答案 1 :(得分:0)

尝试设置这些标题:

Host: login.microsoftonline.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:59.0) Gecko/20100101 Firefox/59.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8