当我以编程方式遵循协议(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
最好的问候。
答案 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