API Google Analytics — получение токена обновления с помощью OAuth2 и ASP.NET

Я пытаюсь настроить автономный доступ для приложения Google Analytics API с помощью OAuth2 и использую ASP.NET для POST моего кода авторизации в обмен на токен обновления, но я не могу получить ответ от сервера, чтобы дать мне токен обновления.

Я использовал пример кода из документации MSDN для почтового запроса, поэтому я могу только предположить, что это правильно, однако я получаю сообщение об ошибке «Удаленный сервер вернул ошибку: (400) Неверный запрос в System.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.


person mmmoustache    schedule 12.06.2013    source источник
comment
Спасибо, это помогло мне :)   -  person user1926138    schedule 24.07.2013


Ответы (1)


Похоже, вы передаете параметры дважды. Один раз в строке запроса:

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

person aeijdenberg    schedule 12.06.2013
comment
Большое спасибо за решение. - person user1926138; 24.07.2013