1

我想設置谷歌分析API應用程序使用OAuth2離線訪問,我用ASP.NET來發布我的授權代碼換取刷新令牌,但我無法從服務器得到刷新令牌的響應。谷歌分析API - 檢索與OAuth2和ASP.NET的刷新令牌

我已經使用了MSDN文檔中的示例代碼來發布發佈請求,所以我只能假定這是正確的,但是我收到了錯誤消息「遠程服務器返回錯誤:(400) .Net.HttpWebRequest.GetResponse()「:

using System; 
using System.IO; 
using System.Net; 
using System.Text; 

WebRequest request = WebRequest.Create ("https://accounts.google.com/o/oauth2/token?code=xxxmyauthorizationcodexxx&client_id=xxxxxxxxx.apps.googleusercontent.com&client_secret=xxxxxxxxxxxx&redirect_uri=https://mysite.com/oauth2callback&grant_type=authorization_code"); 
request.Method = "POST"; 
string postData = "code=xxxmyauthorizationcodexxx&client_id=xxxxxxxxx.apps.googleusercontent.com&client_secret=xxxxxxxxxxxx&redirect_uri=https://mysite.com/oauth2callback&grant_type=authorization_code"; 
byte[] byteArray = Encoding.UTF8.GetBytes (postData); 
request.ContentType = "application/x-www-form-urlencoded"; 
request.ContentLength = byteArray.Length; 

Stream dataStream = request.GetRequestStream(); 
dataStream.Write (byteArray, 0, byteArray.Length); 
dataStream.Close(); 

WebResponse response = request.GetResponse(); 
dataStream = response.GetResponseStream(); 
StreamReader reader = new StreamReader (dataStream); 
string responseFromServer = reader.ReadToEnd(); 

reader.Close(); 
dataStream.Close(); 
response.Close(); 

我已經成功地使用GET方法來獲取授權碼開始,我下面這個文檔:https://developers.google.com/accounts/docs/OAuth2WebServer#handlingtheresponse

我也使用https網站發出請求,我手動刷新我的授權碼過期。有沒有人有這個問題的解決方案?

編輯:對於任何遇到同樣問題的人,首先查看下面的aeijdenberg的回覆,但我的解決方案是,我用於代碼參數的授權碼相當即時過期 - 我一直刷新我的頁面,而沒有請求一個新的。獲取數據只是顯示responseFromServer變量的內容。

+0

謝謝你幫我:) – user1926138

回答

3

看起來你傳遞了兩次參數。一旦查詢字符串:

WebRequest request = WebRequest.Create ("https://accounts.google.com/o/oauth2/token?code=xxxx... 

然後再作爲POST數據。我建議刪除查詢字符串,例如直接POST到「https://accounts.google.com/o/oauth2/token」。

也暗示保證,如果你沒有這樣做,所有的參數都是URL編碼: http://msdn.microsoft.com/en-us/library/system.web.httputility.urlencode.aspx

+0

感謝你爲這個,這幫助我得到我需要的東西! – mmmoustache

+0

謝謝你的解決方案。 – user1926138