【发布时间】: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