Получив код авторизации от 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' точно такой же, как я вставил в исходный запрос (и он был действителен, потому что я получил код обратно через прослушивание в качестве веб-сервера на этом порту), но я также попробовал просто' http://localhost' в случае.
Я попробовал несколько предложений, таких как установка для прокси нулевого значения (без изменений) и изменение Accept (не разрешалось добавлять этот заголовок в веб-запрос).
В каждом случае я получаю HTTP 400 - неверный запрос (попытка / получение срабатывает с исключением, подтверждающим это).
Установка косой черты после / token (я попробую все!) Привела к 500 Internal Server Error, так что это тоже не было.
Есть идеи, что я делаю не так?