【问题标题】:How do I secure my Google Cloud Endpoints APIs with Firebase token verification?如何使用 Firebase 令牌验证保护我的 Google Cloud Endpoints API?
【发布时间】:2016-07-17 06:14:43
【问题描述】:

我的设置:

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

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

为了保护服务器上的 API,我认为我必须使用 Firebase 服务器 SDK 的内置 verifyIdToken() 方法(请参阅 Firebase 上的 Verifying ID Tokens)来解码从客户端应用程序。由于 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;
}

【问题讨论】:

  • 您是否使用 App Engine 柔性环境或 App Engine 标准环境实现了这一目标?

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


【解决方案1】:

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

Task<FirebaseToken> authTask = FirebaseAuth.getInstance().verifyIdToken(idToken)
.addOnSuccessListener(new OnSuccessListener() {
        @Override
        public void onSuccess(Object tr) {//do smtg }
    }).addOnFailureListener(new OnFailureListener() {
        @Override
        public void onFailure(Exception excptn) {//do smtg }
    }).addOnCompleteListener(new OnCompleteListener() {
        @Override
        public void onComplete(Task task) {//do smtg }
    });
    try {
        Tasks.await(authTask);
    } catch(ExecutionException | InterruptedException e ){
        //handle error
    }
    FirebaseToken decodedToken = authTask.getResult();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-29
    • 2018-12-29
    • 1970-01-01
    • 2017-07-06
    • 2016-06-09
    • 2020-12-24
    • 2018-06-25
    相关资源
    最近更新 更多