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

我很难找到关于在我的GAE应用程序中使用OAuth2的明确答案.首先,这不是一个端点应用程序,只是一个普通的老
python应用程序.

如果在我的应用程序中使用OAuth端点(appid.appspot.com/_ah/OAuth*),我可以获得oauth.get_current_user()方法以在需要时返回经过身份验证的用户,但这是使用OAuth1,已弃用 – Google的开发文档非常清楚.

所以我尝试使用Google的OAuth2端点来验证我的应用程序,并且我已经获得了访问令牌,但是我的GAE应用程序中的oauth.get_current_user()调用总是抛出异常(无效的OAuth sig),并且在预期时永远不会呈现User对象.我已尝试使用各种范围授权我的应用程序(https://www.googleapis.com/auth/userinfo.email\u0026hd; https://www.googleapis.com/auth/appengine.admin),但它没有当我使用OAuth2令牌签署请求时,我的GAE应用程序从不接受请求为有效,oauth.get_current_user()始终抛出异常.

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

最佳答案 TL;博士;

在appengine代码中尝试这个:

from google.appengine.api import oauth
oauth.get_current_user(SCOPE)

过去一周我一直走在同样的道路上,在模糊的谷歌文件中徘徊.

我最后的理解是,AppEngine从未正式进入OAuth2领域.您在整个Google API文档中看到了这些“OAuth1已被弃用”的消息,但在appengine文档中它实际上很安静.它谈论OAuth,但没有谈论哪个版本.

这是我认为当前状态的情况(截至2013-12-07):

> [1] Authorizing into appengine with OAuth:* .appspot.com / _ah /方法.不说哪个版本.可能只有1.0.
> [2] Google API Authorization:所有OAuth2大惊小怪,但它是关于请求其他Google API,而不是关于appengine.
> [3] Google accounts authentication with OAuth 2.0:使用常规Google帐户登录.不幸的是,appengine不包括在范围内.

还有另一个文档讨论OAuth 2.0 on appengine,但它是关于从appengine服务器调用Google API,而不是登录它.

我在[3]中尝试使用OAuth2方法访问appengine服务器,但是oauth.get_current_user()方法引发了异常.也尝试了各种范围,希望一个适合appengine,只有失败.

然而,

我在from another SO answer中发现的是该方法的未记录使用:

oauth.get_current_user('https://www.googleapis.com/auth/userinfo.email')

将范围作为参数传递.如果消费者已经使用范围传递了访问令牌,这就有效.

事实证明它毕竟是在appengine code.它不是documented.

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

点赞