實在沒有辦法(我發現)完全繞過訪問外部頁面授權OAuth2.0的訪問。 離我最近的就是在code.google.com/apis/console上創建一個「安裝的應用程序」項目並使用設備方法。 您將收到客戶端ID和客戶端密碼。這些將在稍後使用。 理想情況下,您可以通過code.google.com/apis/youtube/dashboard/
生成一個開發人員密鑰,但我不認爲這是必需的,但我使用JSON表示法爲標題和響應應該很容易適應你選擇的語言。
首先使POST請求與所述首標
{
'Content-Type': 'application/x-www-form-urlencoded',
'Content-Length': post_data.length,
'X-GData-Key': 'key=YOUR_DEVELOPER_KEY'
}
和包含數據到accounts.google.com/o/oauth2/device/code:
{
client_id: 'YOUR_CLIENT_ID',
scope: 'https://gdata.youtube.com'
}
其中YOUR_CLIENT_ID是客戶端您爲之前設置的google apis項目獲得的ID。
你會得到這樣的回答:
{
"device_code" : "4/Pj8m71w5XuEMTT0ZwOJVgvlTfF4Q",
"user_code" : "5wtw67wm",
"verification_url" : "http://www.google.com/device",
"expires_in" : 1800,
"interval" : 5
}
如果你不訪問每30分鐘(1800秒內www.google.com/device(由「VERIFICATION_URL」字段中定義)的「 expires_in「響應字段),您將不得不再次執行此第一個請求。 在www.google.com/device頁面上,如果您尚未登錄,系統會要求您登錄,然後輸入驗證碼(由「user_code」響應字段定義)。您將看到一個授權應用程序的請求和應用程序請求的權限列表。 您想要(至少暫時)存儲「device_code」字段的值。這將在請求訪問令牌和刷新令牌時使用。
既然權限已被授予,我們可以請求訪問/刷新令牌對。這隻需要在您存儲刷新令牌時發生。 要請求訪問/刷新標記對必須進行POST請求與頭
{
'Content-Type': 'application/x-www-form-urlencoded',
'Content-Length': post_data.length,
'X-GData-Key': 'key=YOUR_DEVELOPER_KEY'
}
和數據
{
client_id: 'YOUR_CLIENT_ID',
client_secret: 'YOUR_CLIENT_SECRET',
code: 'YOUR_DEVICE_CODE',
grant_type: 'http://oauth.net/grant_type/device/1.0'
}
響應將要accounts.google.com/o/oauth2/token像這樣
{
"access_token" : "YOUR_ACCESS_TOKEN",
"token_type" : "Bearer",
"expires_in" : 3600,
"refresh_token" : "YOUR_REFRESH_TOKEN"
}
這指定訪問令牌在3600秒(60分鐘)和你目前的訪問令牌是什麼,刷新令牌到期。 您想要存儲用於當前會話的訪問令牌和未來會話的刷新令牌。
在提出API請求時,您需要將訪問令牌包含在授權標頭字段中,幷包含開發者密鑰,就像我們一直以來一樣。 對於上傳視頻,我用這些標題:
{
'Authorization': 'Bearer YOUR_ACCESS_TOKEN',
'X-GData-Key': 'key=YOUR_DEVELOPER_KEY',
'Slug': 'video.mp4',
'Content-Type': 'multipart/related; boundary="f897a6d"',
'Content-Length': post_length,
'Connection': 'close'
}
您可以隨時刷新你的訪問令牌,不只是當舊的到期。要刷新訪問令牌,你做一個POST請求與頭
{
'Content-Type': 'application/x-www-form-urlencoded',
'Content-Length': post_data.length,
'X-GData-Key': 'key=YOUR_DEVELOPER_KEY'
}
和數據
{
client_id: 'YOUR_CLIENT_ID',
client_secret: 'YOUR_CLIENT_SECRET',
refresh_token: 'YOUR_REFRESH_TOKEN',
grant_type: 'refresh_token'
}
到accounts.google.com/o/oauth2/token你會得到這樣的迴應
{
"access_token" : "YOUR_NEW_ACCESS_TOKEN",
"token_type" : "Bearer",
"expires_in" : 3600
}
其中YOUR_NEW_ACCESS_TOKEN是您在未來請求中使用的新令牌。
有沒有辦法將它與.net庫連接起來,例如Video對象? –