【问题标题】:Upload video to Youtube through API without OAuth everytime每次都通过 API 将视频上传到 Youtube,无需 OAuth
【发布时间】:2017-11-24 03:11:06
【问题描述】:
我有一个 PHP 网站,目的是让其他一些用户向我的 youtube 频道提供视频。我已成功设置 OAuth 和 Google API 以将视频从该网站上传到我的 youtube 频道。
我面临的问题是,我必须授权网站上的每个会话才能上传。因此,当我将链接提供给其他人并要求他们上传时,他们将无法绕过 OAuth 并上传。 (我不能提供我的凭据)。
我浏览了 Google OAuth 的 PHP 文档,但不是很清楚。我有点猜测我们必须在初始身份验证期间存储令牌,然后将其用于进一步的操作,但无法弄清楚如何做到这一点。有关如何执行此操作的任何帮助/sn-ps?
【问题讨论】:
标签:
oauth
google-api
youtube-api
google-oauth
google-api-php-client
【解决方案1】:
OAuth 2.0 server-side flow 独立于其在 YouTube API 中的实现,将在资源所有者(在本例中为频道所有者 = 您)进行适当的身份验证和授权后返回两个令牌。这两个令牌是:
-
访问令牌。它用于查询 API 并执行操作(例如上传视频)。访问令牌会随着时间的推移而过期。
-
刷新令牌。它仅用于在旧的访问令牌过期时获取新的访问令牌。刷新令牌不能用于查询 API。
只要服务器应用程序至少跟踪刷新令牌(因为它可以随时获取新的访问令牌),它就能够查询 API 而无需资源所有者的连续授权(直到资源所有者手动撤销应用程序对该资源的访问权限)。
此时,拥有有效访问令牌的任何人都可以代表资源所有者执行操作(在他授予权限的范围内)。如果您希望您的用户能够从他们自己的机器直接上传到您的频道,理论上您可以为他们提供访问和刷新令牌。但是,此过程有一些缺点:
- API 无法区分您和他们。如果你可以做任何事情,他们也可以。他们所做的一切都是你的责任。这就是令牌被视为秘密的主要原因。
- 在任何时候,每个应用程序的每个资源所有者只有一个有效的访问令牌。如果一个客户端使用刷新令牌,所有其他客户端将发现自己被锁定并不得不再次使用刷新令牌,从而再次锁定所有其他客户端,依此类推。这意味着一次只能由一个用户执行操作。
首选解决方案是实施您自己的身份验证机制来保护对您的应用程序的访问,进而可以访问您的频道。我没有使用 YouTube Data API v3 上传视频的经验,所以我能想到的唯一方法是用户将视频上传到您的服务器,然后将其转发到 YouTube 的上传服务器。这当然意味着所有流量都通过您的应用程序服务器进行路由,这显然并不完美。但这是另一个问题的另一回事。