带有 OAuth2 的 YouTube API v3:更新和删除失败并出现“权限不足”错误

2024-05-18

我在尝试着update and delete视频使用YouTube API v3 https://developers.google.com/youtube/v3/docs/videos with OAuth2 用于身份验证 https://developers.google.com/youtube/v3/guides/authentication通过google-api-client (0.6.4)红宝石。但是,当我尝试执行这两个操作中的任何一个时,我看到以下错误消息:

Google::APIClient::ClientError: Insufficient Permission

这是奇怪的事情:使用与以下完全相同的身份验证过程update and delete, I can insert(上传)成功,没问题!所以,我不认为这是我的身份验证设置的问题,而是我代码中其他地方的问题。

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

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

根据 API 文档,以空格分隔的范围集应涵盖insert, update and delete行动。

My client_id, client_secret, refresh_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 文档 https://developers.google.com/youtube/v3/docs/videos/delete没有提供任何例子,所以我没有什么可以比较的。如果我可以提供更多信息以使我的问题更清楚,请告诉我。


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

我的代码本身没有问题。问题是当我最初创建我的refresh_token对于这个帐户。

对于外行来说,YouTube 数据 API (v3) 不支持“服务帐户”,而在 Google API 生态系统的其他地方,当唯一的客户端是您自己时,您通常会通过这种方式来完成设置 OAuth2 身份验证客户端。解决方法是你必须做的事情by hand。请执行以下步骤:


首先,转到 Google“API 控制台”。在“API 访问”下,您需要为“已安装的应用程序”“创建客户端 ID”。这会给你一个Client ID, a Client secret and a Redirect URI(你会想要非localhost一)。把这些写下来。

接下来,您需要手动获取授权码在您最喜欢的网络浏览器中访问如下 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_id, redirect_uri and scope查询参数。就我而言,这就是我出错的地方。当我执行此手动步骤时,我应该将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=..."

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

带有 OAuth2 的 YouTube API v3:更新和删除失败并出现“权限不足”错误 的相关文章

随机推荐