如何获取谷歌oauth的访问令牌?

时间:2012-08-06 17:46:41

标签: c# asp.net google-api oauth-2.0

我正在使用C#(ASP.NET)。我想使用Google OAuth访问我的应用中的用户个人资料详情。我成功获得了授权码,但在获取访问令牌时遇到了问题。 我更喜欢Google tutorials。在教程中,我读到我必须发送请求并从谷歌获得响应。为此,我使用System.Net.HttpWebRequest/HttpWebResponse(我正在以正确的方式前进)。我用过这段代码......

byte[] buffer = Encoding.ASCII.GetBytes("?code=" + code + "&client_id=xxx&client_secret=xxx&redirect_uri=xxxx&grant_type=authorization_code");
HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://accounts.google.com");
req.Method = "POST";
req.ContentType = "application/x-www-form-urlencoded";
req.ContentLength = buffer.Length;

Stream strm = req.GetRequestStream();
strm.Write(buffer, 0, buffer.Length);
strm.Close();

HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
Response.Write(((HttpWebResponse)resp).StatusDescription);

但是,我收到了错误:

  

远程服务器返回错误:(405)Method Not Allowed。

更新:此变量code是授权码。

4 个答案:

答案 0 :(得分:8)

我认为您将POST请求发送到错误的端点,正确的是https://accounts.google.com/o/oauth2/token

答案 1 :(得分:2)

我的代码正在运行,我在上面两行中犯了错误。它应该是这样的

byte[] buffer = Encoding.ASCII.GetBytes("code=" + code + "&client_id=xxx&client_secret=xxx&redirect_uri=xxxx&grant_type=authorization_code");
HttpWebRequest req = (HttpWebRequest)WebRequest.Create("https://accounts.google.com/o/oauth2/token");

剩余代码是正确的。

答案 2 :(得分:0)

原始请求似乎有点过时了。但我发现Google的代码示例包含许多“最佳实践”内务代码,这些代码很难与基本操作分开。

我最近发布了一个文档,它将所有REST操作表示为curl命令。在每种语言中都很难熟悉,但卷曲似乎是普遍存在的。大多数人都知道 - 否则,它很容易掌握。在我的curl示例中, -d 标志表示POST操作。否则,参数将附加到URL。

http://www.tqis.com/eloquency/googlecalendar.htm

答案 3 :(得分:0)

companiesStored