【问题标题】:Google Drive API returning 403 when trying to download file - no information about error given尝试下载文件时,Google Drive API 返回 403 - 未提供有关错误的信息
【发布时间】:2014-08-19 12:23:28
【问题描述】:

所以,我有一个 ruby​​ on rails 项目,我正在使用 google-api gem,并且我正在尝试从我之前允许我的项目访问和管理我的 google 驱动器文件的帐户下载文件.我有刷新令牌和访问令牌,有一段时间,下载工作正常。出于某种原因,在 access_token 过期后,即使我使用刷新从 API 请求一个新的(确实有效),下载请求返回一个 403 错误,没有任何关于它是什么 403 错误的信息。

第一:为什么刷新access_token后,还是403错误? 第二:为什么响应没有返回任何有关错误的信息?

仅供参考,如果我转到我的帐户,取消对该应用的授权,然后通过我的应用再次对其进行授权,则下载再次正常。

我真的需要帮助,因为如果它不起作用,这会破坏我的整个项目。

编辑:再次尝试查看问题是否仍然存在。我昨天删除了我的帐户,再次授予管理文件的权限,并且它一直有效,直到 access_token 过期。之后它会给出 403 错误消息,即使在使用刷新令牌更新访问权限之后也是如此。以下是我从 client.execute 得到的信息(编辑了客户端密钥和密码):

来自 Google API 的响应:#"16653014193614665626"、"e"=>"download"、"gd"=>"true"}、@headers={"User-Agent"=>"google-api-ruby- client/0.7.1 Linux/3.13.0-24-generic\n (gzip)", "Accept-Encoding"=>"gzip", "Content-Type"=>""}, @api_method=nil, @authenticated =nil,@authorization=#https://accounts.google.com/o/oauth2/auth>,@token_credential_uri=#https://accounts.google.com/o/oauth2/token>,@expiry=60, @extension_parameters={}、@additional_parameters={}、@client_id="***.apps.googleusercontent.com"、@client_secret="***"、@scope=["https://www.googleapis.com/auth/drive"、"https://www.googleapis.com/auth/userinfo.email "], @access_token="***", @refresh_token="***">, @body="", @http_method=:get, @uri=#>, @response=# @request=# @request_headers ={"User-Agent"=>"google-api-ruby-client/0.7.1 Linux/3.13.0-24-generic\n (gzip)", "Accept-Encoding"=>"gzip", "内容-Type"=>"", "Authorization"=>"Bearer *", "Cache-Control"=>"no-store"} @ssl=# @response_headers={"access-control -allow-origin"=>"*", "access-control-allow-credentials"=>"false", "access-control-a llow-headers"=>"Accept, Accept-Language, Authorization, Cache-Control, Content-Disposition, Content-Encoding, Content-Language, Content-Length, Content-MD5, Content-Range, Content-Type, Date, GData -版本、主机、If-Match、If-Modified-Since、If-None-Match、If-Unmodified-Since、Origin、OriginToken、Pragma、Range、Slug、Transfer-Encoding、X-ClientDetails、X-GData-Client , X-GData-Key, X-Goog-AuthUser, X-Goog-PageId, X-Goog-Encode-Response-If-Executable, X-Goog-Correlation-Id, X-Goog-Request-Info, X-Goog -实验、x-goog-iam-role、x-goog-iam-authorization-token、X-Goog-Spatula、X-Goog-Upload-Command、X-Goog-Upload-Content-Disposition、X-Goog-Upload -Content-Length, X-Goog-Upload-Content-Type, X-Goog-Upload-File-Name, X-Goog-Upload-Offset, X-Goog-Upload-Protocol, X-Goog-Visitor-Id, X -HTTP-Method-Override、X-JavaScript-User-Agent、X-Pan-Versionid、X-Origin、X-Referer、X-Upload-Content-Length、X-Upload-Content-Type、X-Use-HTTP -状态代码覆盖,X-YouTube-VVT,X-YouTube-Page-CL,X-YouTub e-Page-Timestamp", "access-control-allow-methods"=>"GET,OPTIONS", "date"=>"Wed, 20 Aug 2014 13:13:22 GMT", "expires"=>"Wed , 2014 年 8 月 20 日 13:13:22 GMT", "cache-control"=>"private, max-age=0", "server"=>"UploadServer (\"建于 2014 年 8 月 12 日 13:30:28 ( 1407875428)\")", "content-length"=>"0", "content-type"=>"text/html; charset=UTF-8", "alternate-protocol"=>"443:quic", "connection"=>"close"} @status=403>>>

在查找要隐藏的内容(如 access_token)时分析响应后,是否有可能是“访问控制允许方法”参数的日期和到期日期相同是这里的问题?

【问题讨论】:

  • 跟踪 http 流量,您将看到有关 403 的其他信息。当您使用它时,请仔细检查您的 http 请求是否确实包含来自内存的访问令牌,这可能是 403 的原因之一是缺少访问令牌。
  • 如果流量全部加密,我应该怎么做?我正在查看wireshark上的流量,我似乎找不到403在哪里。
  • 您需要在 SDK 库中启用日志记录。我不使用 Rails,所以不能更具体,但我会给你一个谷歌,如果我找到它,我会发表评论。
  • 感谢您找到它,但我无法让它工作。我将这行代码放在实际建立连接的函数上,第一次使用它时,我遇到了某种中间件错误。我将代码行移至上一个方法并且错误停止了,但控制台或任何日志中都没有任何内容。 :(

标签: ruby-on-rails ruby google-drive-realtime-api google-drive-api


【解决方案1】:

似乎 downloadUrl 直接连接到访问令牌。通过存储具有对文件元数据的首次访问权限的 downloadUrl 并使用具有新访问令牌的相同 downloadUrl,API 返回 403 错误。通过在每次请求新令牌时请求新的 downloadUrl,它也能完美运行。

【讨论】:

【解决方案2】:

403 错误意味着您没有所需的权限,在这种情况下,您正在尝试使用过期的令牌,这听起来像是您的 cookie 策略有问题,请将您的 cookie 策略更改为 none 并让我们知道问题是否会消失。

快乐编码

【讨论】:

  • 我绝对确定在标头上发送的令牌是新的,而不是过期的。 Besises,过期令牌的错误是 401 而不是 403。不过,我会尝试你提出的解决方案......虽然我不知道该怎么做。你能帮忙吗?谢谢。
  • 没有忘记你,只是需要更深入地查看你的案例 =) 在这里我发现有人在你的客户端的 Access_Token 中发现了一个错误,看来你应该使用稍旧的版本。 github.com/google/signet/pull/31 在这里他写了一篇文章,详细说明了他是如何做到的,它应该适合您的项目:krautcomputing.com/blog/2013/12/17/… 我确定代码是正确的,但是正如我之前提到的,发生了错误,如果这有帮助,请告诉我们你,最坏的情况下,我会与其他 GDE 分享你的请求。快乐编码
猜你喜欢
  • 1970-01-01
  • 2019-03-28
  • 1970-01-01
  • 2018-10-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多