有没有办法从客户端获取google oauth2.0令牌的firebase身份验证令牌

时间:2016-08-20 06:50:52

标签: java firebase oauth-2.0 firebase-authentication google-signin

我正在使用Firebase 3.0 REST API,目前仅使用Google登录作为身份验证方式。从Android设备登录后,我尝试使用从下面的代码片段获取的idToken调用rest API,但获得权限被拒绝响应:

FirebaseUser mUser = FirebaseAuth.getInstance().getCurrentUser();
        mUser.getToken(true)
                .addOnCompleteListener(new OnCompleteListener<GetTokenResult>() {
                    public void onComplete(@NonNull Task<GetTokenResult> task) {
                        if (task.isSuccessful()) {
                            idToken = task.getResult().getToken();
                        }
                    }
            });

有没有办法从客户端自身生成id令牌,可以用作访问令牌来验证REST API调用?

2 个答案:

答案 0 :(得分:1)

创建Firebase身份验证令牌需要访问Firebase密钥,因此本质上是服务器端任务。

Firebase身份验证不会公开REST API以将OAuth令牌转换为Firebase令牌。

答案 1 :(得分:1)

如果您要执行的操作是使用用户凭据验证对实时数据库的访问,则必须执行以下步骤:

  1. 从已登录的用户获取Firebase身份验证ID令牌(上面的代码完全正确,只是复制到此处以供参考)。

    FirebaseUser mUser = FirebaseAuth.getInstance().getCurrentUser();
    mUser.getToken(true)
         .addOnCompleteListener(new OnCompleteListener<GetTokenResult>() {
             public void onComplete(@NonNull Task<GetTokenResult> task) {
                 if (task.isSuccessful()) {
                     idToken = task.getResult().getToken();
                 }
             }
         });
    
  2. 向其中一个DB REST端点发出HTTP请求,并将此标记作为URL参数传递给“auth”参数。详细了解here

  3. 值得关注的一些常见错误:

    1. 令牌已过期(自获取后持续1小时)
    2. 您正在将令牌发送到属于其他Firebase项目的数据库。
    3. 登录用户与安全规则中指定的限制不匹配。