每次都通过API将视频上传到Youtube而不使用OAuth

时间:2017-06-21 09:36:18

标签: oauth google-api youtube-api google-oauth google-api-php-client

我有一个PHP网站,就像其他一些用户向我的YouTube频道提供视频一样。我已成功设置OAuth和Google API,以便将该网站上的视频上传到我的YouTube频道。

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

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

1 个答案:

答案 0 :(得分:2)

OAuth 2.0 server-side flow独立于YouTube API中的实施,在资源所有者(= channel owner = you,在本例中)进行适当的身份验证和授权后,将返回两个令牌。这两个令牌是:

  1. 访问令牌。它用于查询API并执行操作(例如上传视频)。访问令牌会随着时间的推移而到期。
  2. 刷新令牌。它仅用于在旧的令牌过期时获取新的访问令牌。刷新令牌不能用于查询API。
  3. 只要服务器应用程序至少跟踪刷新令牌(因为它可以随时获取新的访问令牌),它就能够查询API而无需资源所有者的连续授权(直到资源所有者手动撤销应用程序对资源的访问权限。

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

    1. API无法区分您和他们。如果你可以做任何事情,他们也可以。他们所做的一切都是你的责任。这是令牌被视为秘密的主要原因。
    2. 每个应用程序在任何时候只有一个有效的访问令牌。如果一个客户端使用刷新令牌,则所有其他客户端将发现自己被锁定并且必须再次使用刷新令牌,从而再次锁定所有其他客户端等等。这意味着一次只能对一个用户执行操作。
    3. 首选解决方案是实施您自己的身份验证机制,以保护对您的应用程序的访问,从而可以访问您的频道。我没有使用YouTube Data API v3上传视频的经验,因此我能想到的唯一方法是用户将视频上传到您的服务器,然后将其转发到YouTube的上传服务器。这当然意味着所有流量都通过您的应用服务器进行路由,这显然并不完美。但这是另一个问题的另一个问题。