【问题标题】:Is there any way to get firebase auth token from google oauth2.0 token from client有什么方法可以从客户端的 google oauth2.0 令牌中获取 firebase auth 令牌
【发布时间】:2016-12-27 08:12:24
【问题描述】:

我正在使用 Firebase 3.0 REST API,目前仅使用 google 登录作为身份验证方式。从android设备登录后,我尝试使用从下面的代码sn-p获得的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 调用?

【问题讨论】:

  • 您想对哪些 REST API 调用进行身份验证,具体来说?这些是对 RT 数据库的调用吗?

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


【解决方案1】:

铸造 Firebase 身份验证令牌需要访问 Firebase 机密,因此本质上是一项服务器端任务。

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

【讨论】:

  • 非常感谢@Frank 明确表示需要服务器。您能否向我推荐有关为 google oauth2.0 令牌铸造令牌的任何文档?
  • 我不确定您在这里要做什么。如果您有 Google OAuth id 或访问令牌,则可以通过调用 firebase auth signInWithCredential API 或任何适用于 iOS 的等效项将其交换为 firebase id 令牌。这将通过 firebase 当前用户解决。但是,如果您有 Firebase id 令牌,则不能使用它来检索 Google OAuth 访问令牌。任何一种情况都需要与 Google 服务器通信以生成令牌。
  • 请问,如果您要调用托管在 Google Cloud Function 上的自己的无服务函数,但您在客户端进行身份验证,您是否应该向该函数发布访问令牌?并验证它?
【解决方案2】:

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

  1. 从已登录的用户处获取 Firebase Auth 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. 使用作为 URL 参数“auth”参数传递的此类令牌向 DB REST 端点之一发出 HTTP 请求。阅读更多关于它的信息here

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

  1. 令牌已过期(自提取后持续 1 小时)
  2. 您将令牌发送到属于不同 Firebase 项目的数据库。
  3. 登录的用户不符合您的安全规则中指定的限制。

【讨论】:

    猜你喜欢
    • 2014-02-10
    • 1970-01-01
    • 2021-09-07
    • 2018-04-25
    • 2015-02-11
    • 1970-01-01
    • 1970-01-01
    • 2015-06-02
    • 2021-09-12
    相关资源
    最近更新 更多