1

我正在尝试使用 OAuth2 为 Google Analytics API 应用程序设置离线访问,并且我正在使用 ASP.NET 发布我的授权代码以换取刷新令牌,但我无法从服务器获得响应给我刷新令牌。

我已将 MSDN 文档中的示例代码用于发布请求,因此我只能假设这是正确的,但是我收到错误消息“远程服务器返回错误:(400) System.Net.HttpWebRequest 的错误请求。获取响应()“:

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 变量中的内容。

4

1 回答 1

3

看起来您正在传递参数两次。一旦进入查询字符串:

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

然后再次作为 POST 数据。我建议删除查询字符串,例如直接发布到“ https://accounts.google.com/o/oauth2/token ”。

如果您还没有这样做,还建议确保所有参数都经过 URL 编码:http: //msdn.microsoft.com/en-us/library/system.web.httputility.urlencode.aspx

于 2013-06-12T22:25:18.530 回答