每次都通过 API 无需 OAuth 将视频上传到 Youtube

Upload video to Youtube through API without OAuth everytime

我有一个 PHP 网站,据说是为了其他一些用户向我的 youtube 频道贡献视频。我已成功设置 OAuth 和 Google API 以将视频从该网站上传到我的 YouTube 频道。

我面临的问题是,我必须授权从网站上传的每个会话。因此,当我将 link 给其他人并要求他们上传时,他们将无法绕过 OAuth 并上传。 (我不能提供我的凭据)。

我浏览了 Google OAuth 的 PHP 文档,但不是很清楚。我有点猜测我们必须在初始身份验证期间存储令牌,然后将其用于进一步的操作,但无法弄清楚如何做到这一点。任何 help/snippets 如何做到这一点?

OAuth 2.0 server-side flow,独立于其在 YouTube API 中的实施,将 return 在资源所有者(= 频道所有者 = 您,在这个案例)。这两个标记是:

  1. 一个访问令牌。它用于查询 API 并执行操作(例如上传视频)。访问令牌会随着时间的推移而过期。
  2. 一个刷新令牌。它仅用于在旧访问令牌过期时获取新访问令牌。刷新令牌不能用于查询 API.

只要服务器应用程序至少跟踪刷新令牌(因为它可以随时使用它获取新的访问令牌),它就能够查询 API 而无需连续资源所有者的授权(直到资源所有者手动撤销应用程序对该资源的访问)。

此时,任何拥有有效访问令牌的人都可以代表资源所有者执行操作(在他授予权限的范围内)。如果您希望您的用户能够直接从他们自己的机器上传到您的频道,理论上您可以为他们提供访问和刷新令牌。但是,此过程有一些缺点:

  1. API分不清你和他们。如果你能做到一切,他们也能。他们所做的一切都是你的责任。这是令牌被视为 secret.
  2. 的主要原因
  3. 在任何时候,每个应用程序的每个资源所有者都只有一个有效的访问令牌。如果一个客户端使用刷新令牌,所有其他客户端将发现自己被锁定并且必须再次使用刷新令牌,从而再次锁定所有其他客户端等等。这意味着一次只能对一个用户执行操作。

首选解决方案是实施您自己的身份验证机制来保护对应用程序的访问,而应用程序又可以访问您的频道。我没有使用 YouTube Data API v3 上传视频的经验,所以我能想到的唯一方法是用户将视频上传到您的服务器,然后将其转发到 YouTube 的上传服务器。这当然意味着所有流量都通过您的应用程序服务器进行路由,这显然并不完美。但那是另一个问题的另一回事。