针对云端点的自定义认证(用户模型)-Python

10 投票
1 回答
2063 浏览
提问于 2025-04-18 11:54

我正在开发一个安卓应用,后端使用的是谷歌的应用引擎(GAE),主要处理会话等功能。我想使用谷歌云端点来开发一个API,并且想要一个自定义的用户认证模型。我不想使用谷歌的OAuth认证,而是想实现一个简单的邮箱和密码的用户认证模型,使用基于会话的令牌。我对GAE完全没有经验,但我之前用过Python和它的一些框架(比如Django、Flask等)。

过去一周我一直在寻找这种类型的示例项目,但没有找到。

有没有人能给我提供一些示例代码或资源,教我如何实现一个带有会话管理和CSRF保护的端点,并且支持SSL?

另外,如果你觉得云端点不适合我的应用(服务器后端),那么请推荐一个可以帮助我创建自己的RESTful API的资源,要求支持JSON编码、CSRF保护和会话管理。

我已经看过以下链接,但没有一个提供详细的解决方案:

1 个回答

11

你要准备好迎接一段不简单的旅程。这不是个简单的过程,但我已经找到了一种方法,虽然有点小技巧。

首先,有一个为GAE(谷歌应用引擎)准备的基础项目(用Python写的),它实现了一个自定义的邮箱和密码登录系统,使用的是webapp2的扩展功能:http://appengine.beecoss.com/

这个项目遵循了这篇博客中关于设置自定义身份验证的指导:http://blog.abahgat.com/2013/01/07/user-authentication-with-webapp2-on-google-app-engine/

这个项目会让用户在登录后开始一个会话。接下来,为了在你的接口中访问这个会话里的用户信息,你需要按照你之前发的第一个StackOverflow链接中的说明来操作。

关键是,在完成之前的步骤后,要确保你的接口中的会话密钥和基础代码的配置文件中的会话密钥匹配。这样,你就能知道是谁发起了请求,并在他们通过验证后继续进行接口调用:

    self.get_user_from_cookie()

    if not self.user:
        raise endpoints.UnauthorizedException('Invalid token.')

这种自定义身份验证的工作方式真是让人哭笑不得,所以如果你习惯用Django,并想用这种方式来实现你的应用,那就去做吧。对我来说,已经“无法回头”,我对谷歌只记录适用于谷歌账户用户的身份验证方案感到非常不满。

楼主,直接在GAE上使用Django,省去你的烦恼。我相信Django社区能提供很多与移动应用快速集成的方案。

谷歌,没人想强迫他们的应用用户必须拥有谷歌账户才能登录,别再这样了。

撰写回答