当前位置: 首页 > 知识库问答 >
问题:

Google Drive API同时访问“在线”和“离线”

薛经艺
2023-03-14

这是我之前问题的后续:如何从远程服务器访问Google Drive应用程序数据

我有一个需要访问Google Drive AppFolder的应用程序,包括客户端(在线、JavaScript)和服务器端(离线、Python)。我的应用程序是独一无二的,因为客户端和服务器可能无法通过原始身份验证进行通信。

因此,我使用下面的代码来获取服务器的auth令牌(启动客户端):

gapi.auth.authorize({
        'client_id': CLIENT_ID,
        'scope': SCOPES,
        'access_type': 'offline',
        'response_type': 'code',
        'state': 'my_state',
        }, null, 2),
        'redirect_uri': 'http://server/oauth2callback',
        'immediate': false
    },
    handleOfflineAuthResult);

服务器存储包括刷新令牌在内的凭据。

然后,客户端(在随后的用户会话中)直接向Google Drive发送令牌请求:

gapi.auth.authorize({
                    'client_id': CLIENT_ID,
                    'scope': SCOPES,
                    'immediate': true
                }, handleAuthResult);

当客户这样做的时候 <罢工> 它获得一个刷新令牌,但使服务器的refresh_token无效 。因此,我的服务器不能再刷新它的令牌,并得到“accesstokenrefresh error:invalid _ grant”。

假设客户端和服务器无法通过原始身份验证进行通信(即,客户端不能直接向服务器请求其auth_token,这是设计的),是否有任何方法可以解决此问题?

我想到的唯一“解决方案”是让客户端将其auth_token和refresh_token存储在AppFolder中,服务器不断拉动AppFolder以获取新凭据,随后用客户端替换其副本。

共有1个答案

郁隐水
2023-03-14

你说

当客户端这样做[调用gapi.auth.authorize]时,它会获得一个刷新令牌,但会使服务器的refresh_token无效

至少第一部分是不正确的,我怀疑第二部分也是。gapi.auth.authorize返回访问令牌,而不是刷新令牌(见https://developers.google.com/api-client-library/javascript/reference/referencedocs#OAuth20TokenObject)。

我非常怀疑为客户端请求访问令牌会使服务器的刷新令牌失效。如果您 100% 确定它是,则应为每个 JS 和 Web 客户端应用程序使用单独的客户端 ID。请注意,JS 客户端永远不会使用刷新令牌,因为这将是一个主要的安全漏洞。JS 客户端始终根据需要从您的服务器或 Google 请求访问令牌。

 类似资料:
  • 我试图使用VBScript和Oauth脱机访问谷歌日历API。我设法获得了一个刷新令牌和一个访问令牌,现在我想进入实际使用API的步骤,使用以下代码: 我得到的回应是: 即使访问令牌是有效的--如果我将sURL更改为https://www.googleapis.com/oauth2/v1/tokeninfo并运行该脚本,我将得到以下响应,显示一个有效的令牌: 如果我粘贴URL https://ww

  • 我正在尝试使用Google OAuth2 api获取用户的配置文件。用户身份验证后,在同意页面上,我总是被要求“离线访问” 浏览器中的网址如下所示:- https://accounts.google.com/o/oauth2/auth?scope=email 如上面的URL中可见,我已将范围参数传递为“电子邮件” Google Auth API页面说:- “此范围要求您的应用程序能够访问: 用户的

  • 我正在使用<code>Microsoft.Owin.Security。Google(版本)middlware为我的应用程序提供Google OAuth。 它的配置如下: 非常简单的东西。我使用身份服务器作为MW来发出声明。 这是完全有意义的,因为我在URL中请求作用域: https://accounts.google.com/o/oauth2/auth?scope=openid简介邮件 然后我接受

  • 在线访问者页涵盖 [访问者状况] 和 [在线访问者] 详细信息 1.访问者状况 直接明了的展示三个时间段(10分钟、15分钟、30分钟)内访问者的响应次数,该功能对举办活动的活动页作用较大 2.在线访问者 1)显示在线访问者的详细信息,包含上站时间、最后响应时间、已浏览网页数 2)可以详细知道某个访问者对网站内容的浏览程度 3)同时具有筛选功能,可选择在线、离线、全部及指定IP追踪进行精准筛

  • 问题内容: 我的要求是我有服务器J2EE Web应用程序和客户端J2EE Web应用程序。有时客户端可以脱机。当客户上线时,他应该能够来回同步更改。我还应该能够基于一些过滤器/规则来控制哪些行/表需要同步。有没有现成的Java框架可以做到这一点?如果我需要自己实施,您可以建议哪些不同的策略? 我想到的一个解决方案是维护SQL日志并在同步期间在另一端执行相同的语句。您认为此策略有任何问题吗? 问题答

  • 问题内容: 我们正在做一个MySQL的小型基准测试,我们希望了解它对数据的性能。 该测试的一部分是查看当多个并发线程对服务器执行各种查询时,服务器如何工作。 在MySQL文档(5.0)是不是多线程的客户真的清楚。我应该指出,我确实针对线程安全库()进行了链接 我正在使用准备好的语句,并且同时执行读取(SELECT)和写入(UPDATE,INSERT,DELETE)操作。 我应该为每个线程打开一个连