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的上傳服務器。這當然意味着所有的流量都通過應用服務器進行路由,這顯然不是完美的。但這是另一個問題的另一個問題。