2013-08-05 2 views
1

Я пытаюсь реплицировать шаги OAuth, которые обычно выполняются с помощью кнопки «Connect to QuickBooks», используя HttpWebRequest/HttpWebResponse.Получение кода подтверждения OAuth через .NET HttpWebRequest

Это просто на первом захватывая маркер запроса и генерирование ссылки авторизации:

private const string oauthBaseUrl = "https://oauth.intuit.com/oauth/v1"; 
private const string urlRequestToken = "/get_request_token"; 
private const string urlAccessToken = "/get_access_token"; 
private const string verifyUrl = "https://appcenter.intuit.com"; 
private const string authorizeUrl = "https://appcenter.intuit.com/Connect/Begin"; 

... 

var consumerContext = new OAuthConsumerContext 
         { 
          ConsumerKey = System.Utilities.Cryptography.Encryption.ConvertToUnsecureString(ckSS), 
          ConsumerSecret = System.Utilities.Cryptography.Encryption.ConvertToUnsecureString(csSS), 
          SignatureMethod = SignatureMethod.HmacSha1 
         }; 
IOAuthSession session = new OAuthSession(consumerContext, oauthBaseUrl + urlRequestToken, authorizeUrl, oauthBaseUrl + urlAccessToken); 
IToken requestToken = session.GetRequestToken(); 
string authorizationLink = session.GetUserAuthorizationUrlForToken(requestToken, callbackUrl); 

Тогда я иду через захватывая код запроса подтверждения, который генерируется в строке Set-Cookie при запросе сайта в авторизации ссылка:

var requestAuth = (HttpWebRequest) WebRequest.Create(authorizationLink); 
requestAuth.Method = "GET"; 
requestAuth.ContentType = "application/x-www-form-urlencoded"; 
requestAuth.Accept = "text/html, application/xhtml+xml, */*"; 
requestAuth.Headers.Add("Accept-Encoding", "gzip, deflate"); 
requestAuth.Headers.Add("Accept-Language", "en-us"); 
requestAuth.Host = "appcenter.intuit.com"; 
requestAuth.KeepAlive = true; 
var responseAuth = (HttpWebResponse) requestAuth.GetResponse(); 
Stream answerAuth = responseAuth.GetResponseStream(); 
var _answerAuth = new StreamReader(answerAuth); 
string htmlAuth = _answerAuth.ReadToEnd(); 

// Need to grab the request verification code embedded in the set-cookie string 
string cookies = responseAuth.Headers.Get("Set-Cookie"); 
int idx = cookies.IndexOf("__RequestVerificationToken", StringComparison.Ordinal); 
if (idx > 0) 
{ 
    int startIndex = cookies.IndexOf("=", idx, StringComparison.InvariantCultureIgnoreCase); 
    int endIndex = cookies.IndexOf(";", startIndex + 1, StringComparison.InvariantCultureIgnoreCase); 

    requestVerificationCode = cookies.Substring(startIndex + 1, endIndex - (startIndex + 1)); 
    postDataString += requestVerificationCode; 
} 

Как я понимаю, код запроса проверки необходима для того, чтобы получить код проверки OAuth, который возвращается в PostData приложенного к обратному вызову URL, который в своей очереди, необходимо, чтобы получить затяжку доступа п.

Здесь начинается трудность. Используя Fiddler2, я обнаружил, что URL-адрес входа для создания кода проверки OAuth составляет https://appcenter.intuit.com/Account/LogOnJson. Но независимо от того, насколько я пытаюсь реплицировать HTTP POST с помощью HttpWebRequest, все, что я получаю взамен, - это ошибка 500. Мне интересно, есть ли у кого-нибудь рабочий пример этого шага? Возможно ли это? Надеюсь, так, потому что альтернатива потянуть IE и пройти через те же шаги, что и макрос, слишком уродлива.

Любая помощь по этому вопросу? Благодаря!

ответ

2

Вы можете скачать пример приложения Dotnet для понимания того, как работает поток OAuth:

https://github.com/IntuitDeveloperRelations/IPP_Sample_Code

Набор ключей приложения в web.config.

+0

Я ценю ответ. Проблема заключается в том, что вы не понимаете, как работает поток OAuth, однако он реплицирует его без необходимости использования браузера. Я хотел бы иметь возможность входа в систему с учетными данными и захватить код подтверждения без необходимости в браузере. Я пытаюсь выполнить рабочий процесс, используя HttpWebRequest/HttpWebResponse. – Jonathan

+0

Мне нужно будет проверить еще раз. –

+1

Вам нужно будет использовать браузер и кнопку «Подключиться к QuickBooks». Мы не поддерживаем метод, который вы описываете. –

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