我使用谷歌 Cloud endpoints (版本1,使用android studio)为我的Android应用程序构建了一个移动后端 . 我希望通过电子邮件/密码验证我的用户,因此我使用Firebase身份验证来执行此操作 . Firebase身份验证sdk允许我在客户端(在android中)获取每个用户的令牌,而firebase管理员sdk允许我检查后端令牌的有效性 . 我知道在 Cloud endpoints 我可以提供自己的自定义身份验证器(请参阅:Google Cloud Endpoints and user's authentication),我计划在我的自定义身份验证器中调用firebase admin sdk来验证用户的呈现令牌 .
我的问题是,因为我使用谷歌 Cloud endpoints 来构建我的后端,我不知道在我可以验证任何令牌之前,在哪里插入代码来执行firebase管理对象的初始化 . 在常规应用程序引擎环境中,您将在HTTPServlet的init()方法中执行此初始化(请参阅https://github.com/GoogleCloudPlatform/firebase-appengine-backend/blob/master/src/main/java/com/google/cloud/solutions/flexenv/backend/MessageProcessorServlet.java),但是 Cloud endpoints 通过自动提供"SystemServiceServlet"作为HTTPServlet来隐藏此信息 . 我已经尝试了继承SystemServiceServlet并重写init()方法,但是然后将 endpoints 部署到app引擎失败了,因为显然,创建android客户端库要求必须使用SystemServiceServlet(并且必须将其命名为"SystemServiceServlet") .
我可以在 Cloud endpoints 提供的每个api方法中对firebase管理应用程序进行初始化(例如,在我的api的insert方法中),但这看起来效率极低 . 如何在使用谷歌 Cloud endpoints 构建的后端中使用Firebase管理员sdk?
非常感谢你花时间陪伴
2 回答
由于我无法在Cloud Endpoints中找到初始化Firebase管理代码的合适位置,因此我编写了自己的服务器端Java代码,以根据https://firebase.google.com/docs/auth/admin/verify-id-tokens#verify_id_tokens_using_a_third-party_jwt_library验证Firebase令牌
这是一个帮助程序类,您可以使用它来验证用户的Firebase令牌并获取其Firebase用户uid(此代码使用https://bitbucket.org/b_c/jose4j/wiki/Home中的jose.4.j库来执行JWT操作):
@ Dan7620,提出了另一种替代方法,但它并没有解决问题 . 这是一个简单的解决方案,它使用Firebase Admin SDK,在Cloud Endpoints模块中正确配置和初始化 . 我将总结这里的步骤:
将serviceAccountKey.json放入应用程序的WEB-INF文件夹中 .
在appengineweb.xml中插入: