Firebase管理员-获取Google OAuth令牌

时间:2020-07-08 14:14:03

标签: firebase firebase-authentication google-cloud-functions

我有一个Web应用程序,用户可以在其中sign in with Google

在登录过程中,我添加了一个能够访问Google日历的范围。

现在用户已登录,我想-在服务器端-获取其当前的Google访问令牌,以便发出请求并获取其事件列表。

是否有一种方法可以获取当前的OAuth令牌(无需刷新令牌),以便我在服务器端完全实现此目的?

2 个答案:

答案 0 :(得分:0)

我想您可以检查此article并特别注意网站的建议。

我了解您已经配置了同意屏幕,这是using OAuth 2.0上基本步骤的第一步。因此,我知道您只需执行以下步骤:

  1. 从Google授权服务器获取访问令牌
  2. 检查用户授予的访问范围。
  3. 将访问令牌发送到API

我想您也可以看看其他doc来获得更多GCP见解,以了解您使用用户令牌授权请求的目标

已编辑: 关于Firebase身份验证,我知道这是在用户设备上发生的,您可以使用一些代码来检索令牌,然后将其发送到此处所述的后端服务器。

作为示例,下面是在Android中检索令牌的示例代码:

FirebaseUser mUser = FirebaseAuth.getInstance().getCurrentUser();
mUser.getIdToken(true)
    .addOnCompleteListener(new OnCompleteListener<GetTokenResult>() {
        public void onComplete(@NonNull Task<GetTokenResult> task) {
            if (task.isSuccessful()) {
                String idToken = task.getResult().getToken();
                // Send token to your backend via HTTPS
                // ...
            } else {
                // Handle error -> task.getException();
            }
        }
    });

答案 1 :(得分:0)

关于OAuth 2.0的一些信息

每当用户通过Google或第3方(Authorization Code)登录您的应用/网站时,此授权码就会交换为AccessTokenRefreshToken

通过Google发送的AccessToken通常有效期为60分钟。

离线访问(服务器端)

我们将其分为两部分:

如果您需要在用户上次活动后60分钟内进行更新

您可以将firebase和gapi一起使用来实现。您将获得AccessToken,可以将其发送回服务器以添加到日历。

More info on implementation

如果您需要在用户上次活动60分钟后进行更新

Firebase&gapi的大多数方法在内部处理AuthorizationCode流。他们甚至在60分钟后进一步刷新AccessToken。对于大多数开发人员而言,这是有益的,因为他们将不必担心管理所有令牌。

此方法可对开发人员隐藏RefreshTokenAuthorizationCode。即使您的服务器具有访问令牌,它也无法刷新它,并且将被视为无用。

要实现完全脱机访问,在获取AuthorizationCode的初始请求中,您需要将HTTP GET参数access_type发送到offline

GAPI为您提供了grantOfflineAccess() method,它返回了AuthorizationCode,以后可以在服务器上使用它来获取访问令牌和刷新令牌。

注意:如果要在数据库中存储AuthorizationCode,请确保它是安全的。由于安全原因而设置了Firebase中的限制。通常不与AuthorizationCode对话会更安全。

更多链接