我試圖刷新訪問令牌使用Youtube API v2
與C#。我做這樣的:Youtube API刷新令牌與C#返回invalid_grant
string _url = "client_id=" + HttpUtility.UrlEncode(_clientID) + "&client_secret=" + HttpUtility.UrlEncode(_clientSecret) + "&refresh_token=" + HttpUtility.UrlEncode(_refreshToken) + "&grant_type=refresh_token";
public string RefreshYoutubeToken(string _url) {
string _response = "";
TcpClient _tcpClient = new TcpClient("accounts.google.com", 443);
Stream _netStream = _tcpClient.GetStream();
SslStream _sslStream = new SslStream(_netStream);
_sslStream.AuthenticateAsClient("accounts.google.com");
{
byte[] _contentAsBytes = Encoding.ASCII.GetBytes(_url.ToString());
StringBuilder _message = new StringBuilder();
_message.AppendLine("POST /o/oauth2/token HTTP/1.1");
_message.AppendLine("Host: accounts.google.com");
_message.AppendLine("Content-Type: application/x-www-form-urlencoded");
_message.AppendLine("Content-Length: " + _contentAsBytes.Length.ToString());
_message.AppendLine("");
byte[] _headerAsBytes = Encoding.ASCII.GetBytes(_message.ToString());
_sslStream.Write(_headerAsBytes);
_sslStream.Write(_contentAsBytes);
}
StreamReader _reader = new StreamReader(_sslStream);
while(true) { // Print the response line by line to the debug stream for inspection.
string _line = _reader.ReadLine();
if(_line == null) { break; }
_response += _line;
if(_line == "0") { break; }
}
return _response;
}
這工作得很好,當我登錄和檢索access token
首次,然而,當我想用refresh token
來獲取新的access token
,就像他們在Google Developers上描述 - https://developers.google.com/youtube/2.0/developers_guide_protocol_oauth2#OAuth2_Refreshing_a_Token - 我收到一個錯誤,返回invalid_grant
。
我讀somwhere,問題可能來自不同的客戶端 - 服務器日期時間,我的結論是,其實我的客戶日期比服務器後期約3秒,例如,客戶端12點10分52秒和服務器12:10:55。
我已經試過改變客戶的日期時間,但沒有運氣。
有沒有人有任何想法如何解決這個問題?使用這種方法或其他方法,我只需要刷新access token
。
查看底層的http post請求並將其與oauth操場進行比較。最有可能的原因是您的網址或發佈數據有誤 – pinoyyid
@pinoyyid我搞砸了,得到了這個結果:'POST/o/oauth2/token HTTP/1.1 主持人:accounts.google.com 內容長度:211 內容類型:應用/ X WWW的窗體-urlencoded 授權:承載 CLIENT_ID = XXXXXXXXXXX& client_secret = XXXXXXXXXXX& refresh_token = XXXXXXXXXXX& grant_type = refresh_token'然而它返回無效的請求。它與此相同:http://goo.gl/FEIwj但它不起作用。當你用xxxxxxx輸出你正在屏蔽該問題的代碼時,你需要輸入 –
。只需更改一些隨機數字即可。我懷疑這裏有人對你的Youtube視頻感興趣。見下面 – pinoyyid