带有 OAuth2 的 YouTube API v3:更新和删除失败并显示错误"Insufficient Permission"



我正在尝试使用带有OAuth2的YouTube API v3 updatedelete视频,以便通过google-api-client (0.6.4) Ruby gem进行身份验证。但是,当我尝试执行这两个操作中的任何一个时,我看到以下错误消息:

Google::APIClient::ClientError: Insufficient Permission
奇怪的

是:使用与updatedelete完全相同的身份验证程序,我可以成功insert(上传(,没问题!因此,我不认为这是我的身份验证设置的问题,而是代码中的其他地方。

我的读写scope在以下任何操作中始终相同:

https://www.googleapis.com/auth/youtube https://www.googleapis.com/auth/youtube.upload

根据API文档,这组以空格分隔的作用域应该涵盖insertupdatedelete动作。

我的client_idclient_secretrefresh_token对于所有这些动作也总是相同的 - 所以,这也不可能成为问题,不是吗?请注意,我的程序在过期时会自动获取新access_token,因此,我再次不认为这就是问题所在。

为了进行比较,这是我的insert(上传(代码的样子(这有效(:

# Auth stuff, then...
@client.execute!(
  :api_method => @youtube.videos.insert,
  :body_object => body,
  :media => Google::APIClient::UploadIO.new(file_path, 'video/*'),
  :parameters => {
    'uploadType' => 'multipart',
    :part => body.keys.join(','),
  }
)

这是我的delete代码的样子(这失败了(:

# Auth stuff, then...
@client.execute!(
  :api_method => @youtube.videos.delete,
  :parameters => {
    'id' => youtube_id,
  }
)

我错过了什么?不幸的是,用于删除的 YouTube API 文档没有提供任何示例,所以我没有什么可比较的。请告诉我是否有进一步的信息,以使我的问题更清晰。

我很确定这个问题的所有 11 个观点(截至撰写本文时(都是我,但我会发布一个答案,以防将来对某人有所帮助:

我的代码本身没有问题。问题是当我最初为此帐户创建refresh_token时。

对于外行,YouTube Data API(v3(不支持"服务帐户",在Google API生态系统的其他地方,当唯一的客户端是您自己时,通常可以完成设置OAuth2身份验证客户端的方式。解决方法是您必须手动完成的操作。执行以下步骤:


首先,转到谷歌"API 控制台"。在那里,在"API 访问"下,您需要为"已安装的应用程序"创建客户端 ID"。这将为您提供一个Client ID,一个Client secret和一个Redirect URI(您需要非localhost的(。把这些写下来。

接下来,您需要通过访问您喜欢的 Web 浏览器中的 URL 来手动获取授权代码,同时登录到您刚刚为其创建客户端 ID 的同一帐户

https://accounts.google.com/o/oauth2/auth
  ?client_id={client_id}
  &redirect_uri={redirect_uri}
  &scope={space separated scopes}
  &response_type=code
  &access_type=offline

当然,您需要输入client_idredirect_uriscope查询参数。就我而言,这就是我出错的地方。当我执行此手动步骤时,我应该将scope参数设置为:

https://www.googleapis.com/auth/youtube https://www.googleapis.com/auth/youtube.upload

但相反,我只是做了https://www.googleapis.com/auth/youtube.upload,这不足以更新/删除视频!

最后,您需要获取一个 refresh_token ,通过获取如下 URL:

https://accounts.google.com/o/oauth2/token
  ?code={authorization_code}
  &client_id={client_id}
  &client_secret={client_secret}
  &redirect_uri={redirect_uri}
  &grant_type=authorization_code

并用如下命令将其卷曲:

$ curl https://accounts.google.com/o/oauth2/token -d "code=..."

这将返回一个包含您的refresh_token的 JSON 响应,然后您在通过 Google API 以编程方式授权您的请求时使用该响应。

注意 我们现在是 2022 年,如果您使用的是 Node.js 或任何其他语言,您至少需要包含一个 youtube 授权范围,我只是熟悉 node.js 只

例如 https://www.googleapis.com/auth/youtube 了解更多信息,请查看YouTube官方文档

相关内容

  • 没有找到相关文章