我最近一直在努力从python脚本访问gmail API。
由于脚本需要在服务器上运行,而不需要任何形式的Web浏览器,因此我必须实施OAuth for Devices流程,详见https://developers.google.com/accounts/docs/OAuth2ForDevices
这已经很好了,因为我一直在测试"配置文件"范围,我已按预期访问令牌。
但是,要切换到我的脚本需要的实际令牌,因为我需要被授权写入用户的电子邮件,我已经尝试使用范围{{1}运行我的脚本},返回以下内容:
www.googleapis.com/auth/gmail.compose
此时我很好奇,并尝试了各种范围,对我来说似乎相当随意,哪些会,而且不会起作用。
工作:
{u'error_uri': u'code.google.com/apis/accounts/docs/OAuth2.html', u'error_description': u'Not authorized to request the scopes: [www.googleapis.com/auth/gmail.compose]', u'error': u'invalid_scope'}
不工作:
www.googleapis.com/auth/calendar
www.google.com/m8/feeds
我已将我的代码上传到https://gist.github.com/Hanse00/3a861430b1543599b3ed,以便有兴趣查看的人。
Gmail API确实已在项目控制台中启用。
如果有人知道为什么会这样,我很高兴收到你的来信!
注意:我必须编辑范围,因为它们被视为链接,而且我的声誉不够高,不能全部发布。我试过的范围实际上是正确的。
答案 0 :(得分:3)
用于设备流的Oauth2不太安全,并且对于一些不太敏感的API而言是好的/允许的,但不是全部。 Gmail API不允许使用它。
您可以让您的服务器实现Web服务器流程(如果您可以在其上运行http服务器),然后您的客户端将使用您可以检索+存储的正确令牌重定向到那里: https://developers.google.com/accounts/docs/OAuth2WebServer