【问题标题】:Can oauth.get_current_user() be used with OAuth2?oauth.get_current_user() 可以与 OAuth2 一起使用吗?
【发布时间】:2013-11-24 19:39:03
【问题描述】:

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

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

所以我尝试使用 Google 的 OAuth2 端点对我的应用程序进行身份验证,并且我已经获得了访问令牌,但是我的 GAE 应用程序中的 oauth.get_current_user() 调用总是抛出异常(无效的 OAuth sig)并且从不按预期呈现用户对象.我已经尝试使用各种范围授权我的应用程序(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 应用程序?

【问题讨论】:

  • 我们的应用也遇到了类似的问题。更糟糕的是,由 App Engine OAuth 1 认证的用户的 Google 用户 ID (user.user_id()) 与 OAuth 2 认证返回的 Google 用户 ID 不同,对于同一个人。

标签: python google-app-engine oauth


【解决方案1】:

tl;博士;

在 appengine 代码中试试这个:

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

过去一周我一直在同一条路上徘徊,在模糊的谷歌文档中徘徊。

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

这是我认为当前状态的情况(截至 2013 年 12 月 7 日):

还有另一个文档谈到 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

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

【讨论】:

  • 响应是很久以前的。不确定你是否还在这里。我在使用您的解决方案时遇到了“NotAllowedError”。有什么想法吗?
  • 这在 App Engine 上是否有效?在 Oauth 重定向中使用它来尝试获取用户 ID 时,我们只会得到 user = "0"。
猜你喜欢
  • 2018-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-15
  • 2018-02-16
  • 2020-06-30
  • 2014-11-15
  • 2011-12-07
相关资源
最近更新 更多