我很难找到关于在我的 GAE应用中使用OAuth2的明确答案。首先,这是不端点应用程序,只是一个普通的旧python应用程序。
如果在我的应用中使用OAuth端点(oauth.get_current_user()
),我可以获得appid.appspot.com/_ah/OAuth*
方法以在预期时返回经过身份验证的用户,但这是使用OAuth1,已弃用 - Google&#39 ; s dev docs非常清楚。
所以我尝试使用Google的OAuth2端点来验证我的应用,并且我已经获得了访问令牌,但我的GAE应用中的oauth.get_current_user()
调用总是会引发异常(无效的OAuth sig)并且在预期时永远不会显示User对象。我已尝试使用各种范围(https://www.googleapis.com/auth/userinfo.email
和https://www.googleapis.com/auth/appengine.admin
)授权我的应用,但是当我使用OAuth2令牌签署请求时,我的GAE应用从不重要接受请求为有效,oauth.get_current_user()
始终抛出异常。
所以我的问题是,在使用OAuth2令牌签名请求时,是否可以使用我的GAE应用中的oauth.get_current_user()
来电?如果是这样,我必须授权哪些范围访问GAE应用程序?
答案 0 :(得分:7)
TL;博士;
在appengine代码中尝试这个:
from google.appengine.api import oauth
oauth.get_current_user(SCOPE)
过去一周我一直走在同样的道路上,在模糊的谷歌文件中徘徊。
我最后的理解是,AppEngine从未正式进入OAuth2领域。您在整个Google API文档中看到了这些“OAuth1已被弃用”的消息,但在appengine文档中它实际上很安静。它谈论OAuth,但没有谈论哪个版本。
这是我认为当前状态的情况(截至2013-12-07):
*.appspot.com/_ah/
方法。不说哪个版本。可能只有1.0。还有另一个文档讨论OAuth 2.0 on appengine,但它是关于从appengine服务器调用Google API,而不是登录它。
我尝试使用[3]中的OAuth2方法访问appengine服务器,但oauth.get_current_user()
方法引发了异常。还尝试了各种范围,希望一个适合发动,只会失败。
然而,
我发现from another SO answer,是无证件使用该方法:
oauth.get_current_user('https://www.googleapis.com/auth/userinfo.email')
将范围作为参数传递。如果消费者已经使用范围传递了访问令牌,那么这很有用。
事实证明它毕竟是appengine code。它不是documented。
欢迎对任何误解进行改进或更正。