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 會為許多開發人員帶來更多麻煩,部分情況已在網誌文章 ClientLogin #FAIL 中說明。
將 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,該 ID 會要求提供額外資訊,以驗證要求是否僅來自您的團隊所發布的應用程式。
在 Android 裝置上,系統會使用套件名稱和簽署憑證雜湊,而非用戶端 ID 和用戶端密碼,來識別應用程式。在 iOS 裝置上,系統會使用軟體包 ID 和應用程式商店 ID。如要瞭解如何擷取這項資訊,請參閱 Google API 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
,即可擷取 API。部分用戶端程式庫會管理擷取和重新整理存取權權杖的作業。如果您想自行編寫授權程式碼,我們在 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。當需要授權要求時,裝置版 OAuth 2.0 會向使用者顯示專屬代碼。此時,使用者需要在其他裝置 (例如筆記型電腦或手機) 上瀏覽 http://google.com/device,然後輸入專屬代碼。應用程式會顯示類似下圖的畫面:
使用者在其他裝置上輸入驗證碼時,應用程式會定期輪詢,查看是否已輸入驗證碼。完成後,系統會擷取用於發出 API 呼叫的權杖。如要瞭解實際運作情形,請查看示範,這項功能可在任何支援網路的裝置上執行。這個 API 本身不受平台限制,因此非常適合用於沒有網頁轉譯功能的裝置。我們已發布Python 範例程式碼,供您參考。
摘要
OAuth 2.0 授權可為需要 YouTube 授權的開發人員提供彈性。熟悉 ClientLogin 的開發人員可能會發現,設定應用程式使用 OAuth 2.0 需要稍微多一點的工作,但一旦轉移完成,OAuth 2.0 應用程式就能為使用者提供更高的彈性、安全性和可用性,並支援多個平台。
如果您對 OAuth 2.0 或本文中的任何範例有任何疑問,歡迎在 Stack Overflow 上使用 youtube-api 標記提出問題。