使用OAuth2进行认证 + 兼容google.appengine.api.users服务
我们正在尝试把我们的应用放到Google市场上,其中一个要求是使用OAuth2来进行身份验证。可惜的是(而且这有点奇怪),AppEngine并没有这个选项。
目前,我们使用的是OpenID进行身份验证。我一直在网上寻找相关资源,但没能找到一个明确的指南来正确地完成这个过程。
我有几个担心的问题:
- 我应该使用什么范围的权限?
- 会话应该怎么管理?(Users服务在这方面做得很好)
- 本地开发的过程会是什么样的?我需要有网络连接才能使用
dev_appserver.py
吗? - 我们非常依赖
user_id
这个由Users服务提供的属性。切换到OAuth2后,我能否依赖它保持相同的值? - 在其他AppEngine服务中(那些依赖于Users服务的)会有可能的冲突吗?
- 在迁移后,
app.yaml
中的login: required
标志还会按预期工作吗?
另外,如果我们能继续使用Users服务,那就太好了。
编辑:稍微偏题,但我觉得AppEngine的Users服务文档需要更新。里面还说“支持OpenID是将你的应用与Google App Marketplace集成的强大方式”,但现在已经不再是这样了。
1 个回答
你问了很多问题,所以我只会回答我知道的那些(在我们自己的应用从OAuth1迁移到OAuth2之后)。
注意:我想强调的最重要的一点,也是让我恍然大悟的地方是:你通过用户安装你的GAM应用获得的API访问权限,可以和最终用户访问你的应用完全分开。也就是说,在你从域管理员那里获得了应用的权限(在他安装之后),你可以使用你的应用引擎服务账户从服务器端访问所有API。你只在用户访问你的应用时使用用户API。因此,这两者是完全分开的。说完这些,以下是我的一些见解。
你要使用的权限范围(scopes)取决于你需要的服务。我没有找到旧权限范围和新权限范围之间的明确对应关系——你需要通过https://developers.google.com/oauthplayground/来测试一下。我还建议你设置一个测试应用,专门用于OAuth测试。
就我们的应用而言,用户会话的管理和以前一样,你有一个常规的用户对象,可以按预期进行操作。与Google API的交互是通过应用引擎服务账户完成的。简单来说,就是你使用用户API来管理用户对你应用的访问和权限,而Google则使用通过服务账户和管理员邮箱生成的令牌来管理对其API的访问。(这个问题可以单独写一篇文章)
我不太确定你说的这个是什么意思。
用户API应该按预期工作。
我们没有遇到任何问题(这很意外!),但我想这取决于你的实现方式。
login: required
应该按预期工作,因为它的工作方式和用户API是一样的。