0

我有一个PHP网站,说为其他用户贡献视频到我的YouTube频道。我已成功设置OAuth和Google API,将该网站的视频上传到我的YouTube频道。无需每次都通过API将视频上传到Youtube

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

我浏览了Google OAuth的PHP文档,但它并不十分清楚。我有点猜测,我们必须在初始认证期间存储令牌,然后将其用于进一步的操作,但无法弄清楚究竟该如何做。任何帮助/片段如何做到这一点?

回答

2

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

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

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

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

  1. API无法区分你和他们。如果你可以做任何事情,他们也可以做。他们所做的一切都是你的责任。这是令牌被认为是秘密的主要原因。
  2. 每个应用程序在任何时候只有一个有效的访问令牌。如果一个客户端使用刷新令牌,所有其他客户端将发现自己被锁定,并且必须再次使用刷新令牌,从而再次锁定所有其他客户端等等。这意味着操作一次只能由一个用户执行。

该解决方案是实施您自己的身份验证机制,以防止访问您的应用程序,从而访问您的频道。我没有使用YouTube Data API v3上传视频的经验,因此我唯一能想到的方式是用户将视频上传到您的服务器,然后将其转发到YouTube的上传服务器。这当然意味着所有的流量都通过应用服务器进行路由,这显然不是完美的。但这是另一个问题的另一个问题。

相关问题