【发布时间】:2013-06-17 20:06:01
【问题描述】:
我最近开始使用 Google App Engine。我打算使用 Flask 来提供网页和 Endpoints API,最好使用 Endpoints-Proto-Datastore 来提供其他一切。
从一开始,GAE 上的非 Google 身份验证机制似乎需要一些工作。对于我迄今为止发现的问题,我将不胜感激:
自定义身份验证
如果您可以将 Open ID 提供程序编写为应用程序的一部分,请使用 Python-OpenID 之类的东西,并在同一工作流程中实现消费者,使其看起来像常规登录。通过这种方式,它可以很好地集成到 GAE 用户 API 提供的内容中。 我猜如果这样做正确,users.get_current_user() 会正常工作。
如果您想跳过编写自己的 OpenID 提供程序,而是使用与 NDB 集成的 Flask-Login 编写电子邮件/密码验证系统,那也应该没问题。然而,GAE documentation 中的一个令人费解的信息说我可以像这样实例化一个用户对象:
user = users.User("XYZ@XYZ.com")
但是,(这里没有 user.put() 方法)users.get_current_user() 仍然返回 None。那么构造用户对象有什么用呢?
端点授权
在 Endpoint-Proto-Datastore 滚动 API 的方法装饰器中包含 user=required 时,OAuth 似乎可以立即工作 - 在 API 资源管理器中对其进行测试时,您只需打开 OAuth 2.0 开关并选择一个有效的 Oauth 2.0 Scope。那么这是否意味着如果我们实现一个与用户 API 正确集成的 OpenID 提供程序,使用 Endpoints API 的 OAuth 魔法就不够了?
同样,构造用户对象似乎无助于满足身份验证要求。
自定义身份验证/另一个 OpenID 实现如何与 Endpoint API 身份验证/授权一起使用?
【问题讨论】:
-
非常好的问题。我想做或多或少相同的事情:使用用户名/令牌实现某种“基本”身份验证。尝试使用 servletFilter,但似乎 servletFilters 不适用于 /_ah/api-URL。
标签: google-app-engine oauth-2.0 openid google-cloud-endpoints