Не удалось получить токен oauth2 через request.GetResponse () - PullRequest
2 голосов
/ 13 июля 2011

Я пытаюсь получить доступ к данным Google (контакт, редактировать данные профиля, календарь и т. Д.), Используя GData и серверную часть OAuth2.0 ( Проверьте эту ссылку ), я завершил первый шаг и получил первый код, и при попытке отправить запрос на получение oauth2_token я всегда получал ошибку "Удаленный сервер возвратил ошибку: (400) Bad Request." Вот код, который я использую для POST запроса, который возвращает OAuth2_token:

string clientToken = Request.QueryString["code"];


        string post =
            string.Format(
                @"code={0}&client_id={1}&client_secret={2}&redirect_uri=http://localhost/default.aspx&grant_type=authorization_code",
                clientToken, Settings.ClientId, Settings.ClientSecret);

        WebRequest httpRequest = WebRequest.Create("https://accounts.google.com/o/oauth2/token");
        httpRequest.Method = "POST";
        httpRequest.ContentType = "application/x-www-form-urlencoded";

        StreamWriter streamWriter = new StreamWriter(httpRequest.GetRequestStream());
        streamWriter.Write(post);
        streamWriter.Flush();
        streamWriter.Close();

        var ss = (HttpWebResponse)httpRequest.GetResponse();
        Stream stream = ss.GetResponseStream();

Любая помощь ??? Я потратил 2 дня до сих пор, пытаясь решить эту проблему, но тщетно: (

Ответы [ 2 ]

1 голос
/ 23 апреля 2012

Я думаю, вы должны закодировать параметр redirect_uri , используя HttpUtility.UrlEncode.

. Также вы должны закодировать тело запроса, используя кодировку Utf8:

byte[] encoded = Encoding.UTF8.GetBytes(post);
httpRequest.ContentLength = encoded.Length

hopeэто помогает.

1 голос
/ 31 декабря 2011

Может ли быть так, что redirect_uri должен быть в кодировке URI?

[https://groups.google.com/forum/#!topic/oauth2-dev/9xnn8nUIA2s]

...