我最近开始使用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身份验证/授权一起使用?
答案 0 :(得分:5)
我想不使用oAuth,而是使用用户/令牌进行更简单的身份验证。
所以我所做的就是创建一个定制的ServletFilter,它映射到/ _ah / spi / *,并在那里拦截来自HTTPServletRequest的登录信息,如果它是Endpoint-API-Request。
到目前为止似乎工作,但我不确定这是否可行。但是因为我没有在任何地方找到非oAuth-Auth的例子,所以这是我最好的镜头。
很想从@bossylobster或@Dan Holevoet获得最佳练习提示。