如何使用Firebase令牌验证保护Google Cloud Endpoints API?

时间:2016-07-17 06:14:43

标签: google-app-engine firebase firebase-realtime-database google-cloud-endpoints firebase-authentication

我的设置:

  • 托管在Google App Engine上的Java后端,其中包含使用Google Cloud Endpoints创建的API
  • 包含上述端点生成的客户端库的移动客户端应用程序。还与Firebase集成以进行身份​​验证和数据库。

我的意图是移动客户端应用程序的用户将能够使用Firebase身份验证登录移动应用程序,然后连接到任何后端API,后者将进行一些处理,然后读取或写入数据进出Firebase数据库。

为了保护服务器上的API,我想我必须使用Firebase Server SDK的内置verifyIdToken()方法(请参阅Firebase上的Verifying ID Tokens)来解码传递给用户的ID令牌来自客户端应用程序。由于verifyIdToken()以异步方式运行,我如何将其与GAE中的API方法集成?到目前为止,我有类似的内容:

@ApiMethod(name = "processAndSaveToDB", httpMethod = "post")
    public Response processAndSaveToDB(@Named("token") String token) {

        Response response = new Response();           

        // Check if the user is authenticated first
        FirebaseAuth.getInstance().verifyIdToken(idToken)
            .addOnSuccessListener(new OnSuccessListener() {
                @Override
                public void onSuccess(FirebaseToken decodedToken) {
                    String uid = decodedToken.getUid();

                    // do bulk of processAndSaveToDB() method

                })
            .addOnFailureListener(new OnFailureListener() {
                @Override
                public void onFailure(Exception e) {

                    // throw unauthorized exception

            });

    return response;
}

1 个答案:

答案 0 :(得分:8)

由于此身份验证任务在任务队列中异步运行,您可以等到该任务结束并以同步方式继续,您可以选择在onSuccess,onFailure和onComplete上添加侦听器。

@include('errors.common')