Google api Auth0和Google API,访问令牌过期,如何将文件写入Google驱动器

Google api Auth0和Google API,访问令牌过期,如何将文件写入Google驱动器,google-api,google-drive-api,google-oauth,access-token,auth0,Google Api,Google Drive Api,Google Oauth,Access Token,Auth0,我已经编写了一个在线转换器,并将Auth0集成到我的网站。我试图实现的是将转换后的文件自动上传到登录用户的谷歌硬盘上。我在Auth0中设置了GoogleOAuth,一切似乎都很好 问题是,谷歌的access\u令牌在60分钟后过期,我没有refresh\u令牌。因此,用户需要再次通过Google登录页面登录。这不是我想要的,因为用户在我的网站上的登录时间实际上超过了60分钟,但谷歌拒绝API调用(因为谷歌令牌过期) 我知道我可以通过设置access\u type=offline请求refresh

我已经编写了一个在线转换器,并将Auth0集成到我的网站。我试图实现的是将转换后的文件自动上传到登录用户的谷歌硬盘上。我在Auth0中设置了GoogleOAuth,一切似乎都很好

问题是,谷歌的
access\u令牌
在60分钟后过期,我没有
refresh\u令牌
。因此,用户需要再次通过Google登录页面登录。这不是我想要的,因为用户在我的网站上的登录时间实际上超过了60分钟,但谷歌拒绝API调用(因为谷歌令牌过期)

我知道我可以通过设置
access\u type=offline
请求
refresh\u令牌
,但这将添加
拥有脱机访问权限
。我不想这样,我只想上传数据到用户的驱动器,如果他点击了我页面上的转换按钮。我不想向用户询问我不需要的权限。如果我(作为一名用户)将我的谷歌账户链接到一个类似的页面上,而该工具要求离线访问,老实说,我不会批准——该权限听起来像是工具创建者可以随时对你的账户做任何他想做的事。。。有许多工具可以对用户的驱动器进行写访问,而无需请求脱机访问,并且只需一次登录,直到用户撤销权限。这是怎么做到的

有没有一种方法可以让Google API调用而不要求离线访问而不迫使用户每隔60分钟一次又一次地批准应用程序(已经批准)

提前感谢,,
phlo

通过请求脱机访问,您正在请求刷新令牌。谷歌将告诉用户你正在请求离线访问。您可以在不告诉用户授权内容的情况下请求某些内容


否在不显示该消息的情况下,无法请求刷新令牌。你也没有办法改变这条信息——这是谷歌的标准做法

通过请求脱机访问,您正在请求刷新令牌。谷歌将告诉用户你正在请求离线访问。您可以在不告诉用户授权内容的情况下请求某些内容


否在不显示该消息的情况下,无法请求刷新令牌。你也没有办法改变这条信息——这是谷歌的标准做法

有没有一种方法可以在不要求离线访问的情况下调用Google API,也不强迫用户每隔60分钟一次又一次地批准应用程序(已经得到他的批准)?

是的,有很多方法,但这取决于用例的具体情况。例如,您的Java/php/etc代码是在服务器上运行,还是在浏览器中运行JavaScript


在浏览器中运行auth可能是最简单的解决方案,因为Google library()可以为您完成所有工作。

有没有一种方法可以在不要求离线访问的情况下调用Google API,也不必强迫用户每隔60分钟一次又一次地批准应用程序(已经获得他的批准)?

是的,有很多方法,但这取决于用例的具体情况。例如,您的Java/php/etc代码是在服务器上运行,还是在浏览器中运行JavaScript

在浏览器中运行auth可能是最简单的解决方案,因为谷歌库()为您完成了所有工作。

我找到了解决方案

预先要求

  • 启用
    在客户仪表板中使用Auth0而不是IdP进行单点登录
  • 创建新的角度路由以处理静默登录回调(例如
    /sso
  • $rootScope.$on("$locationChangeStart", function() {
        if ($location.path().indexOf("sso") == -1) {
            authService.relogin(); //this is your own service
        }
    });
    
    angularAuth0Provider.init()
    中的
    callbackURL
    设置为新的角度路由(
    /sso
    )。将此URL添加到Auth0仪表板中已接受的回调中-这不会以无限循环结束,因为
    locationChangeStart
    -事件不会为此路由调用
    authService.relogin()

  • 添加
    $window.close()
    到角度路由的控制器(
    /sso
    )以自动关闭弹出窗口
  • 通过Auth0对用户进行身份验证,并将时间戳和Auth0-
    access\u令牌保存在某处
  • 重新加载时:

    检查Auth0令牌在
    authService.relogin()中是否仍然有效。否则,用户必须以任何方式再次登录。如果令牌有效且Google令牌即将过期(使用保存的时间戳检查此项以防止不必要的API调用),请检查SSO数据并静默登录(如果存在)

        /* ... */
        if (validToken && googleExpired) {
            angularAuth0.getSSOData(function (err, data) {
                var lastUsedConnection = data.lastUsedConnection;
                var connectionName = (_.isUndefined(lastUsedConnection) ? undefined : lastUsedConnection.name);
                var isGoogle = (_.isUndefined(connectionName) ? false : connectionName == "google-oauth2");
                if (!err && data.sso && isGoogle) {
                    authManager.authenticate();
                    localStorage.setItem("last-relogin", new Date().getTime());
                    angularAuth0.signin({
                        popup: true,
                        connection: data.lastUsedConnection.name
                    });
                }
            });
        }
    
    现在,您将为该用户找到一个新的Google
    access\u令牌(无需离线访问)


    资源:

      • 我找到了解决办法

        预先要求

      • 启用
        在客户仪表板中使用Auth0而不是IdP进行单点登录
      • 创建新的角度路由以处理静默登录回调(例如
        /sso
      • $rootScope.$on("$locationChangeStart", function() {
            if ($location.path().indexOf("sso") == -1) {
                authService.relogin(); //this is your own service
            }
        });
        
        angularAuth0Provider.init()
        中的
        callbackURL
        设置为新的角度路由(
        /sso
        )。将此URL添加到Auth0仪表板中已接受的回调中-这不会以无限循环结束,因为
        locationChangeStart
        -事件不会为此路由调用
        authService.relogin()

      • 添加
        $window.close()
        到角度路由的控制器(
        /sso
        )以自动关闭弹出窗口
      • 通过Auth0对用户进行身份验证,并将时间戳和Auth0-
        access\u令牌保存在某处
      • 重新加载时:

        检查Auth0令牌在
        authService.relogin()中是否仍然有效。如果没有,,