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

谷歌云存储JSON API简单上传认证

西门建安
2023-03-14

我很难让GCS JSON API中的“简单上传”方法在Python中工作。文件(https://developers.google.com/storage/docs/json_api/v1/how-tos/upload#simple)使它看起来微不足道,但我无法通过授权。我不完全理解授权/身份验证/密钥/令牌,但我正在尝试。我一直试图上传的bucket允许完全读写(它们是公共的),我已经生成并尝试了我能想到的所有组合和密钥排列。

我的代码:

def postTest():
  headers = {'Host':'www.googleapis.com','Authorization':'Bearer? WHATGOESINHERE?','Content-Length': 0, 'Content-Type': "text/plain"}
  files = {'file': ('report.txt', 'justsomeblankityblanktext\n')}

  r = requests.post("https://storage.googleapis.com/upload/storage/v1beta2/b/NOTACTUALLYAREALBUCKETOBVIOUSLY/o?uploadType=media&name=testi.txt", headers=headers, files=files)

  print(r.request.headers)
  print(r.url)
  print(r.text)

回应是:

CaseInsensitiveDict({'Content-Length': '172', 'Accept-Encoding': 'gzip, deflate, compress', 'Accept': '*/*', 'User-Agent': 'python-requests/2.2.1 CPython/2.7.6 Darwin/13.1.0', 'Host': 'www.googleapis.com', 'Content-Type': 'text/plain', 'Authorization': 'Bearer? WHATGOESINHERE?'})
https://storage.googleapis.com/upload/storage/v1beta2/b/NOTACTUALLYAREALBUCKETOBVIOUSLY/o?uploadType=media&name=testi.txt
{
 "error": {
  "errors": [
   {
    "domain": "global",
    "reason": "authError",
    "message": "Invalid Credentials",
    "locationType": "header",
    "location": "Authorization"
   }
  ],
  "code": 401,
  "message": "Invalid Credentials"
 }
}

所以,我的问题是关于标题中的“授权”键值对。应该包括什么样的“授权令牌”?

共有1个答案

邵昆琦
2023-03-14

OAuth2授权有点棘手。这个想法是,你不用一直使用你的真实密码来处理所有事情,而是使用你的密码一次来获得一个可以在接下来的一个小时左右工作的临时代码。然后你把那个代码用于所有事情,如果由于某种原因它被泄露了,它无论如何都会在一个小时左右停止工作。更复杂的是,OAuth还允许你要求作为最终用户的凭据(例如,如果你在网上制作一个云存储查看器,你可能想让人们登录,但你不想知道他们的谷歌密码)。

获取访问令牌的方法是向谷歌的OAuth2服务索要一个。您可以通过几种方式来实现这一点,具体取决于您想要授权的方式。如果你的应用程序总是像自己一样运行,你可以为它下载一个私钥,它可以用来创建断言。这是操作说明。

另一个常见的用例是充当你的应用程序。在这种情况下,你将创建一个登录URL的链接,让用户导航到那里并登录,然后你的应用程序将收到一个密钥(或者用户将获得一个密钥粘贴到你的应用程序中),该密钥将为你提供一个永久的“刷新令牌”,你可以随时使用该令牌请求新的访问令牌。这里有安装应用程序的说明。

还有一些其他类型的事情。最终,它有点复杂,这就是为什么谷歌提供了一个Python客户端,可以为您处理OAuth2授权。您仍然需要考虑您想要使用哪种身份验证,但是Google API Python库可以处理大部分混乱的细节。

 类似资料:
  • 我应该做什么才能成功上传图片?任何帮助都将不胜感激。 非常感谢。

  • 我建立Android应用程序链接到谷歌云存储。我想允许访问GCS到我的Android应用程序只。 谷歌提供三种安全连接地面军事系统的解决方案: Oauth 2.0(谷歌账户也是如此) 资料来源:https://developers.google.com/storage/docs/authentication?hl=FR 是否有其他通过地面军事系统安全连接的解决方案?我希望通过这种方式在地面军事系统

  • 我们一直在使用服务,在(AWS)中,我们意外删除了一个目录,因此我们认为它应该在中,但是经过查看,尽管处于打开状态,但它并不存在。

  • 我有一个关于谷歌云存储的新手问题。我希望创建一个网站,人们可以上传文件(在概念上类似于Flickr)并查看它们。我在看谷歌的云存储选项,它看起来很有趣。我在认证过程中有点挂断了。是所有用户都需要谷歌账户,还是我只是误读了?我想我的问题是,我能创建一个每个人都不必注册谷歌账户的网站吗?谢谢你的耐心和帮助

  • 追踪下面。 相关的Python片段: 最终触发(从ssl库): 溢出错误:字符串长度超过2147483647字节 我想我缺少一些特殊的配置选项? 这可能与这名1.5岁的年轻人有关,显然他还没有解决问题:https://github.com/googledatalab/datalab/issues/784. 谢谢你的帮助! 完整跟踪: [File”/usr/src/app/gcloud/downlo

  • 我想按照官方文档中提供的示例将一个文件上传到Google云存储 然而,我得到了一个错误: 线程“main”com.google.cloud.storage.StorageException中的异常:获取服务帐户的访问令牌时出错:400个错误请求{“错误”:“无效的授予”、“错误描述”:“无效的JWT:令牌必须是短期令牌(60分钟)并且在合理的时间范围内。请检查JWT声明中的iat和exp值。”位于