Аутентификация для Box в C# 4.0

Я пытаюсь получить токен доступа, используя приведенный ниже код на языке C#, но я получаю исключение 400 неверных запросов.

Код:

WebRequest httpWReq = WebRequest.Create("https://www.box.com/api/oauth2/token");


string postData = "grant_type=authorization_code"; 
postData += "&code=" + Code; 
postData += "&client_id=MY_CLIENT_ID"; 
postData += "&client_secret=MY_CLIENT_SECRET"; 
postData += "&redirect_uri=https://www.google.com";

byte[] data = Encoding.UTF8.GetBytes(postData); 
httpWReq.Method = "POST"; 
httpWReq.ContentType = "application/x-www-form-urlencoding"; 
httpWReq.ContentLength = data.Length; 

using (Stream stream = httpWReq.GetRequestStream()) 
{ 
    stream.Write(data, 0, data.Length); 
}

var response = httpWReq.GetResponse();
var responseStream = response.GetResponseStream();
using (var reader = new StreamReader(responseStream))
{
    var responseReader = reader.ReadToEnd();
    MessageBox.Show(responseReader);
}

Но я всегда получаю следующую ошибку:

{"error":"invalid_request","error_description":"Invalid grant_type parameter or parameter missing"}

Как преодолеть эту проблему?

Любая помощь будет оценена. Заранее спасибо.

Спасибо, Хариш Редди

2 ответа

Решение

Я вижу две возможные проблемы, обе с этой строкой:

postData += "&redirect_uri=https://www.google.com";
  1. Я думаю, вам нужно будет urlencode URI перенаправления.
  2. Я предполагаю, что вы не являетесь владельцем домена google.com, так что это недопустимое значение.:) Вам нужно будет указать домен, с которого вы делаете запрос. Или еще лучше, предварительно установите этот URI перенаправления на странице конфигурации вашего приложения Box.

Кстати, вы можете быть заинтересованы в проверке SDK Box API v2 для.Net (и соответствующего примера OAuth на основе MVC), который работает на GitHub и NuGet. (Полное раскрытие: я участвую в обоих.)

HttpWebRequest httpWReq =
                (HttpWebRequest)WebRequest.Create("https://api.box.com/oauth2/token");

            ASCIIEncoding encoding = new ASCIIEncoding();
            string postData = "grant_type=authorization_code";
            postData += "&code=" + authorizationCode;
            postData += "&client_id=" + ClientId;
            postData += "&client_secret=" + ClientSecretId;
            byte[] data = encoding.GetBytes(postData);

            httpWReq.Method = "POST";
            httpWReq.ContentType = "application/x-www-form-urlencoded";
            //httpWReq.ContentType = "application/x-www-form-urlencoded";
            httpWReq.ContentLength = data.Length;

            using (Stream stream = httpWReq.GetRequestStream())
            {
                stream.Write(data, 0, data.Length);
            }
Другие вопросы по тегам