从 Google 获得用于访问用户日历的授权代码后,我现在正尝试将其交换为访问令牌。根据他们自己的文档:
实际请求可能如下所示:
POST /o/oauth2/token HTTP/1.1 Host: accounts.google.com Content-Type: application/x-www-form-urlencoded code=4/v6xr77ewYqhvHSyW6UJ1w7jKwAzu& client_id=8819981768.apps.googleusercontent.com& client_secret={client_secret}& redirect_uri=https://oauth2-login-demo.appspot.com/code& grant_type=authorization_code
我访问它的尝试如下(C#):
string url = "https://accounts.google.com/o/oauth2/token";
WebRequest request = HttpWebRequest.Create(url);
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
string body = "code=<the_code_I_received>&\r\n"
+ "client_id=<my_client_id>&\r\n"
+ "client_secret=<my_client_secret>&\r\n"
+ "redirect_uri=http://localhost:4300\r\n"
+ "grant_type=authorization_code&\r\n"
;
byte[] bodyBytes = Encoding.ASCII.GetBytes(body);
request.ContentLength = bodyBytes.Length ;
Stream bodyStream = request.GetRequestStream();
bodyStream.Write(bodyBytes, 0, bodyBytes.Length);
bodyStream.Close();
try
{
request.GetResponse();
'http://localhost:4300' 与我在原始请求中输入的完全一样(它是有效的,因为我通过在该端口上作为 Web 服务器侦听得到了代码),但我也尝试了只是 'http: //localhost'以防万一。
我尝试了一些建议,例如将代理设置为 null(无更改)和更改 Accept(不允许将该标头添加到 Web 请求)。
在每种情况下,我都会收到 HTTP 400 - 错误请求(try / catch 会触发一个异常说明)。
在 /token 后面加上一个斜杠(我会尝试任何事情!)导致 500 内部服务器错误,所以也不是这样。
知道我做错了什么吗?