Ikai Lan,YouTube Developer Relations – June 2013
YouTube API 會使用 OAuth 2.0 授權使用者要求。我們經常收到提問,詢問 YouTube API 是否會在未來新增 ClientLogin 驗證或類似功能。不過,我們已於 2012 年 4 月 20 日ClientLogin正式淘汰這項功能,且沒有新增這類機制的計畫。
我們認為,支援各種 OAuth 2.0 授權流程,比 ClientLogin 更能為 YouTube 使用者帶來好處,原因如下:這些流程支援電腦應用程式、僅限網頁的應用程式、行動應用程式,甚至是電視等裝置上執行的應用程式,這類裝置沒有複雜的輸入機制,使用 ClientLogin 難以完成驗證。此外,我們發現許多開發人員在發布後,會因 ClientLogin 而遇到更多問題。
將 OAuth 2.0 用於伺服器端獨立指令碼
許多開發人員會使用 ClientLogin 授權在沒有瀏覽器的伺服器上執行的指令列指令碼。使用 OAuth 2.0 時,幾乎都會用到瀏覽器,但如果您是開發 Android 應用程式,並使用 Google Play Services 透過 GoogleAuthUtil. 擷取權杖,就不會用到瀏覽器
在僅限網頁的流程中,如果網站想代表使用者發出經過驗證的 API 呼叫,必須將使用者重新導向至 google.com 驗證頁面,說明應用程式嘗試存取的內容。網頁應用程式接著會收到權杖,並使用該權杖發出 API 呼叫。使用者隨時可以透過「connected apps and sites」頁面撤銷應用程式的存取權。
我們的 Python 程式碼範例會示範指令列指令碼如何啟動瀏覽器,並從終端機視窗發出 API 呼叫、建立本機伺服器來監聽授權重新導向後的程式碼,以及自動儲存權杖以供日後發出 API 呼叫。實際操作影片如下:
使用的權杖是 ASCII 字串。如果是 offline 權杖,則為可攜式。使用擷取的權杖,您就能在桌機上執行指令碼,然後在沒有 GUI 的遠端伺服器上複製及使用程式碼,前提是程式碼會使用相同的用戶端 ID 和密鑰,例項化 OAuth 2.0 用戶端。除了 Python 之外,其他程式設計語言的 Google API 用戶端程式庫也提供管理權杖的輔助方法,這些權杖可在用戶端之間共用,甚至可直接在用戶端標頭或做為網址參數中,用於低階 HTTP 程式庫。
以下列舉使用離線權杖的伺服器端指令碼範例:
- 監控目錄中是否有新影片,並自動上傳至 YouTube 的常駐程式
- 每天更新播放清單內容的 Cron 工作
- 這類指令碼會透過 YouTube Analytics API 監控影片資料,並在發生特定事件時通知頻道管理員,例如總觀看時間超過上限。請注意,在這種情況下,OAuth 2.0 是唯一支援的授權方法,因為 Analytics API 不支援 ClientLogin。
長期存取權杖一節將詳細說明如何產生離線權杖,以用於伺服器端程序。
用戶端 ID 和用戶端密鑰最佳做法
凡是共用相同用戶端 ID 和密碼組合的程式碼,都可以使用相同的存取權杖。建議您將用戶端 ID 和用戶端密鑰的存取權,限制在貴機構電腦和裝置上執行的程式碼。
請勿在原生行動應用程式程式碼中加入用戶端 ID 和用戶端密鑰。所有透過行動裝置進行 OAuth 2.0 驗證的開發人員,都應使用「已安裝的應用程式」用戶端 ID,這會要求提供額外資訊,以驗證要求是否只來自您團隊發布的應用程式。

在 Android 裝置上,系統會使用套件名稱和簽署憑證雜湊的組合來識別應用程式,而非使用用戶端 ID 和用戶端密鑰。在 iOS 裝置上,系統會使用軟體包 ID 和 App Store ID。如要瞭解如何擷取這項資訊,請參閱Google Cloud console說明頁面。
服務帳戶不適用於 YouTube API
服務帳戶無法用於 YouTube Data API 呼叫,因為服務帳戶必須有相關聯的 YouTube 頻道,但您無法將新頻道或現有頻道與服務帳戶建立關聯。如果您使用服務帳戶呼叫 YouTube Data API,API 伺服器會傳回錯誤,且錯誤類型會設為 unauthorized,原因則設為 youtubeSignupRequired。
離線/長期存取 YouTube API
OAuth 2.0 權杖分為短期和長期權杖。如果是單次作業,建議使用生命週期較短的存取權杖。這些權杖會在授予後不久失效。如果是長時間執行的工作,建議您取得更新權杖,用來擷取短期存取權杖。
為確保應用程式收到的是長期更新權杖,而非短期存取權杖,請在建立用戶端 ID 時使用「已安裝的應用程式」流程,並將「已安裝的應用程式類型」值選為 Other:

建議您在此用途使用「已安裝的應用程式」流程。如要在網頁應用程式中長期存取 YouTube API,請在初始授權要求或用戶端設定中,將 access_type 參數設為 offline,並將 approval_prompt 參數設為 force,即可擷取更新權杖。部分用戶端程式庫會管理存取權杖的擷取和重新整理作業。如果您想自行編寫自訂授權碼,我們在 Google Code 網誌上發布了一篇網誌文章,可做為您編寫程式碼的基礎。
在手機、平板電腦和其他裝置上使用 OAuth 2.0
撰寫 Android 應用程式時,開發人員可以利用 Google Play services 處理授權詳細資料。Google Play 服務提供所有 Google API 的標準授權流程,包括 YouTube 平台 API。相較於使用 ClientLogin 的自訂驗證,這種做法可為 Android 應用程式使用者提供更優質的使用者體驗。

在 iOS 裝置上,Google 提供兩種選項:
- Google+ Platform for iOS,可整合 Google 產品的登入功能,並啟用社交功能
- gtm-oauth2 toolkit,可提供授權 UIWebView 並管理權杖
對於要當做「第二螢幕」的裝置,或是電視等沒有易用輸入機制的裝置,建議採用 OAuth 2.0 for Devices。當需要授權要求時,OAuth 2.0 for Devices 會向使用者顯示專屬代碼。此時,系統會要求使用者在其他裝置 (例如筆電或手機) 上瀏覽 http://google.com/device,然後輸入專屬代碼。應用程式會顯示類似下方的畫面:

使用者在其他裝置上輸入代碼時,應用程式會定期輪詢,確認代碼是否已輸入。並擷取權杖以進行 API 呼叫。如要查看實際運作情形,請參閱示範,這項示範可在任何支援網路的裝置上執行。API 本身與平台無關,因此適用於沒有網頁算繪功能的裝置。我們已發布 Python 程式碼範例,供您參考。
摘要
OAuth 2.0 授權可為需要 YouTube 授權的開發人員提供彈性。熟悉 ClientLogin 的開發人員可能會發現,設定應用程式以使用 OAuth 2.0 時,需要多花一點時間才能開始,但移植後,OAuth 2.0 應用程式可為使用者提供更多彈性、安全性,以及跨多個平台的使用體驗。
如果您對 OAuth 2.0 或本文中的任何範例有其他疑問,歡迎前往 StackOverflow 提問並加上 youtube-api 標記。