public Task<Tuple<OAuthToken, UserInfos>> AcquireAccessToken(OAuthToken requestToken, string tokenVerifier) { var headers = new Dictionary<string,string> () { { "oauth_consumer_key", config.ConsumerKey }, { "oauth_nonce", MakeNonce () }, { "oauth_signature_method", "HMAC-SHA1" }, { "oauth_timestamp", MakeTimestamp () }, { "oauth_version", "1.0" }}; var content = string.Empty; headers.Add ("oauth_token", requestToken.Token); headers.Add ("oauth_verifier", tokenVerifier); string signature = MakeSignature ("POST", AccessUrl, headers); string compositeSigningKey = MakeSigningKey (config.ConsumerSecret, requestToken.TokenSecret); string oauth_signature = MakeOAuthSignature (compositeSigningKey, signature); var wc = new WebClient (); headers.Add ("oauth_signature", OAuth.PercentEncode (oauth_signature)); wc.Headers [HttpRequestHeader.Authorization] = HeadersToOAuth (headers); return Task<Tuple<OAuthToken, UserInfos>>.Factory.StartNew (() => { try { ServicePointManager.ServerCertificateValidationCallback = (a, b, c, d) => true; ServicePointManager.Expect100Continue = false; var result = HttpUtility.ParseQueryString (wc.UploadString (new Uri (AccessUrl), content)); OAuthToken token = new OAuthToken (result["oauth_token"], result["oauth_token_secret"]); UserInfos infos = new UserInfos (result["user_id"], result["screen_name"]); return Tuple.Create (token, infos); } catch (WebException e) { Console.WriteLine ("Access token error"); var x = e.Response.GetResponseStream (); var j = new System.IO.StreamReader (x); Console.WriteLine (j.ReadToEnd ()); Console.WriteLine (e); throw e; // fallthrough for errors } }); }