Firebase管理员-获取Google OAuth令牌

Firebase管理员-获取Google OAuth令牌,firebase,firebase-authentication,google-cloud-functions,Firebase,Firebase Authentication,Google Cloud Functions,我有一个web应用程序,用户可以使用Google登录 在登录过程中,我添加了一个能够访问谷歌日历的范围 现在用户已经登录,我想在服务器端获取他们当前的Google访问令牌,以便发出请求并获取他们事件的列表 有没有办法获取当前的OAuth令牌(不需要刷新令牌)以便我完全在服务器端完成此操作?我想你可以检查一下,并特别注意网站推荐 我知道您已经配置了同意屏幕,这是上的基本步骤的第一步。因此,我理解您只需执行以下步骤: 从Google授权服务器获取访问令牌 检查用户授予的访问范围 将访问令牌发送到AP

我有一个web应用程序,用户可以
使用Google登录

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

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


有没有办法获取当前的OAuth令牌(不需要刷新令牌)以便我完全在服务器端完成此操作?

我想你可以检查一下,并特别注意网站推荐

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

  • 从Google授权服务器获取访问令牌
  • 检查用户授予的访问范围
  • 将访问令牌发送到API
  • 我认为,您还可以查看另一个,以了解有关您使用用户令牌授权请求的目标的更多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();
                }
            }
        });
    
    FirebaseUser mUser=FirebaseAuth.getInstance().getCurrentUser();
    mUser.getIdToken(真)
    .addOnCompleteListener(新的OnCompleteListener(){
    未完成的公共void(@NonNull任务){
    if(task.issusccessful()){
    字符串idToken=task.getResult().getToken();
    //通过HTTPS将令牌发送到后端
    // ...
    }否则{
    //Handle error->task.getException();
    }
    }
    });
    
    我想说的是,您可以检查这一点,并特别注意网站推荐

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

  • 从Google授权服务器获取访问令牌
  • 检查用户授予的访问范围
  • 将访问令牌发送到API
  • 我认为,您还可以查看另一个,以了解有关您使用用户令牌授权请求的目标的更多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();
                }
            }
        });
    
    FirebaseUser mUser=FirebaseAuth.getInstance().getCurrentUser();
    mUser.getIdToken(真)
    .addOnCompleteListener(新的OnCompleteListener(){
    未完成的公共void(@NonNull任务){
    if(task.issusccessful()){
    字符串idToken=task.getResult().getToken();
    //通过HTTPS将令牌发送到后端
    // ...
    }否则{
    //Handle error->task.getException();
    }
    }
    });
    
    了解一下OAuth 2.0 每当用户通过Google或第三方注册到您的应用程序/网站时,
    授权码
    ,此授权码将被交换为
    AccessToken
    &
    RefreshToken

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

    脱机访问(服务器端) 让我们将其分解为两部分:

    如果您需要在用户上次活动的60分钟内更新 您可以使用firebase和gapi来实现这一点。您将获得
    AccessToken
    ,可以将其发送回服务器以添加到日历中

    如果您需要在用户上次活动60分钟后更新 Firebase&gapi最常用的方法是在内部处理
    AuthorizationCode
    流。他们甚至在60分钟后进一步刷新
    AccessToken
    。这对大多数开发人员都是有益的,因为他们不会为管理所有令牌而头疼

    但是,此方法对开发人员隐藏了
    refreshttoken
    &
    AuthorizationCode
    。也就是说,即使您的服务器拥有访问令牌,它也无法刷新它,并且将被视为无用

    要实现完全脱机访问,在获取
    AuthorizationCode
    的初始请求中,您需要向
    offline
    发送一个HTTP get参数

    GAPI为您提供了一个返回
    AuthorizationCode
    的函数,稍后可在您的服务器上使用该函数获取访问令牌和刷新令牌

    注意:如果要在数据库中存储
    AuthorizationCode
    ,请确保它是安全的。由于安全原因,在Firebase中设置了限制。通常不与授权代码交谈更安全

    更多链接

    了解一下OAuth 2.0 每当用户通过Google或第三方注册到您的应用程序/网站时,
    授权码
    ,此授权码将被交换为
    AccessToken
    &
    RefreshToken

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

    脱机访问(服务器端) 让我们将其分解为两部分:

    如果您需要在用户上次活动的60分钟内更新 您可以使用firebase和gapi来实现这一点。您将获得
    AccessToken
    ,可以将其发送回服务器以添加到日历中

    如果您需要在用户上次活动60分钟后更新 Firebase&gapi最常用的方法是在内部处理
    AuthorizationCode
    流。他们甚至在60分钟后进一步刷新
    AccessToken
    。Th