使用Firebase为在appengine中运行的Flask应用程序进行身份验证

时间:2017-07-19 04:52:54

标签: python google-app-engine authentication firebase firebase-authentication

您好我的网站运行在appengine上使用flask作为后端框架,我们使用库Flask-OAuth,Flask-Login构建了我们的身份验证和会话管理。

但是现在我需要使用firebase进行身份验证。 我可以在firebase教程之后创建示例应用程序,但我不知道如何与现有应用程序集成。

在firebase团队提供的Firenotes示例中,他们使用两个独立的服务前端和后端。

我想在login.html页面中使用firebase代码,并且一旦客户端验证将信息传递给/ profile url - >使用Flask-Login记录数据库和登录用户中的user_id。

我不确定上述流程是否正确,我不确定将来是否正确。

请尽快帮助解决任何想法!

1 个答案:

答案 0 :(得分:1)

Flask登录使用基于会话的身份验证。客户端使用身份验证方案登录。由于您使用的是Flask-OAuth,因此是oauth流程。如果用户成功进行身份验证,则Flask-Login在令牌交换步骤期间发送响应,并设置一个HTTP HTTP cookie(这意味着javascript无法访问它),该cookie具有用户会话唯一的令牌。然后,客户端使用该令牌在会话持续时间内验证将来的请求。服务器可以随时使会话无效,从而迫使客户端再次登录。

同时,firebase身份验证是JSON Web令牌(JWT)身份验证方案。完成登录流程后,firebase API从Google的应用服务器中检索JWT。

要验证请求,您需要在每个请求上传输该JWT。您的服务器还必须验证JWT,以确保它有效且未过期。

您会注意到,firebase SDK和库未指定JWT到达服务器的方式。我建议使用Authentication: JWT <google's jwt>标头。

解决问题的一种方法是使用JWT完成初始登录流程,然后从那里依靠基于会话的身份验证。您将设置一个预期并验证JWT的登录端点,并使用设置的cookie标头进行响应。从那时起,您将继续使用flask-login提供的基于会话的身份验证。

Google的文档中实际上有一个示例:https://firebase.google.com/docs/auth/admin/manage-cookies