1

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

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

EDIT: для тех, кто испытывает ту же проблему, сначала посмотрите на ответ aeijdenberg ниже, но мое решение заключалось в том, что код авторизации, который я использовал для параметров кода, истекает довольно мгновенно - я постоянно обновлял свою страницу без запроса нового. Чтобы получить данные, просто отобразите содержимое из переменной responseFromServer.

+0

Спасибо это помогло мне :) – user1926138

ответ

3

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

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

+0

благодарит вас за это, это помогло мне получить то, что мне нужно! – mmmoustache

+0

Спасибо за тонну за решение. – user1926138

Смежные вопросы