Google App Engine:使用自定义身份验证或Open ID时的端点身份验证

时间:2013-06-17 20:06:01

标签: google-app-engine oauth-2.0 openid google-cloud-endpoints

我最近开始使用Google App Engine。我打算使用Flask来提供网页和端点API,最好使用Endpoints-Proto-Datastore来处理其他所有内容。

从一开始,GAE上的非Google身份验证机制似乎需要一些工作。我很感激到目前为止我发现的任何问题:

自定义身份验证

如果您可以将Open ID提供程序编写为应用程序的一部分,请使用类似Python-OpenID的内容,并在同一工作流程中实现使用者,以使其看起来像常规登录。这样,它可以很好地集成到GAE Users API提供的内容中。 我猜这是否正确,users.get_current_user()会正常工作。

如果您想跳过编写自己的OpenID提供程序,而是使用与NDB集成的Flask-Login编写电子邮件/密码auth系统,那也应该没问题。但是,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范围。那么这是否意味着如果我们实现一个与User API正确集成的OpenID提供程序,那么使用端点API的OAuth魔法是不够的?

在这里,构建用户对象似乎无助于满足身份验证要求。

自定义身份验证/其他OpenID实现如何与Endpoint API身份验证/授权一起使用?

1 个答案:

答案 0 :(得分:5)

我想不使用oAuth,而是使用用户/令牌进行更简单的身份验证。

所以我所做的就是创建一个定制的ServletFilter,它映射到/ _ah / spi / *,并在那里拦截来自HTTPServletRequest的登录信息,如果它是Endpoint-API-Request。

到目前为止似乎工作,但我不确定这是否可行。但是因为我没有在任何地方找到非oAuth-Auth的例子,所以这是我最好的镜头。

很想从@bossylobster或@Dan Holevoet获得最佳练习提示。