使用OAuth2进行认证 + 兼容google.appengine.api.users服务

2 投票
1 回答
868 浏览
提问于 2025-04-18 13:12

我们正在尝试把我们的应用放到Google市场上,其中一个要求是使用OAuth2来进行身份验证。可惜的是(而且这有点奇怪),AppEngine并没有这个选项。

目前,我们使用的是OpenID进行身份验证。我一直在网上寻找相关资源,但没能找到一个明确的指南来正确地完成这个过程。

我有几个担心的问题:

  1. 我应该使用什么范围的权限?
  2. 会话应该怎么管理?(Users服务在这方面做得很好)
  3. 本地开发的过程会是什么样的?我需要有网络连接才能使用dev_appserver.py吗?
  4. 我们非常依赖user_id这个由Users服务提供的属性。切换到OAuth2后,我能否依赖它保持相同的值?
  5. 在其他AppEngine服务中(那些依赖于Users服务的)会有可能的冲突吗?
  6. 在迁移后,app.yaml中的login: required标志还会按预期工作吗?

另外,如果我们能继续使用Users服务,那就太好了。

编辑:稍微偏题,但我觉得AppEngine的Users服务文档需要更新。里面还说“支持OpenID是将你的应用与Google App Marketplace集成的强大方式”,但现在已经不再是这样了。

1 个回答

2

你问了很多问题,所以我只会回答我知道的那些(在我们自己的应用从OAuth1迁移到OAuth2之后)。

注意:我想强调的最重要的一点,也是让我恍然大悟的地方是:你通过用户安装你的GAM应用获得的API访问权限,可以和最终用户访问你的应用完全分开。也就是说,在你从域管理员那里获得了应用的权限(在他安装之后),你可以使用你的应用引擎服务账户从服务器端访问所有API。你只在用户访问你的应用时使用用户API。因此,这两者是完全分开的。说完这些,以下是我的一些见解。

  1. 你要使用的权限范围(scopes)取决于你需要的服务。我没有找到旧权限范围和新权限范围之间的明确对应关系——你需要通过https://developers.google.com/oauthplayground/来测试一下。我还建议你设置一个测试应用,专门用于OAuth测试。

  2. 就我们的应用而言,用户会话的管理和以前一样,你有一个常规的用户对象,可以按预期进行操作。与Google API的交互是通过应用引擎服务账户完成的。简单来说,就是你使用用户API来管理用户对你应用的访问和权限,而Google则使用通过服务账户和管理员邮箱生成的令牌来管理对其API的访问。(这个问题可以单独写一篇文章)

  3. 我不太确定你说的这个是什么意思。

  4. 用户API应该按预期工作。

  5. 我们没有遇到任何问题(这很意外!),但我想这取决于你的实现方式。

  6. login: required应该按预期工作,因为它的工作方式和用户API是一样的。

撰写回答