oauth.get_current_user()可以与OAuth2一起使用吗?

时间:2013-11-12 15:14:10

标签: python google-app-engine oauth

我很难找到关于在我的 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.emailhttps://www.googleapis.com/auth/appengine.admin)授权我的应用,但是当我使用OAuth2令牌签署请求时,我的GAE应用从不重要接受请求为有效,oauth.get_current_user()始终抛出异常。

所以我的问题是,在使用OAuth2令牌签名请求时,是否可以使用我的GAE应用中的oauth.get_current_user()来电?如果是这样,我必须授权哪些范围访问GAE应用程序?

1 个答案:

答案 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):

还有另一个文档讨论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

欢迎对任何误解进行改进或更正。