private string CreateOauthSignature(string resourceUrl, TwitterMethod method, string oauthNonce, string oauthTimestamp, SortedDictionary <string, string> requestParameters) { //Add the standard oauth parameters to the sorted list requestParameters.Add("oauth_consumer_key", ConsumerKey); requestParameters.Add("oauth_nonce", oauthNonce); requestParameters.Add("oauth_signature_method", OauthSignatureMethod); requestParameters.Add("oauth_timestamp", oauthTimestamp); requestParameters.Add("oauth_token", AccessToken); requestParameters.Add("oauth_version", OauthVersion); var sigBaseString = requestParameters.ToTwitterWebString(); var signatureBaseString = string.Concat(method.ToString(), "&", Uri.EscapeDataString(resourceUrl), "&", Uri.EscapeDataString(sigBaseString.ToString())); //Using this base string, we then encrypt the data using a composite of the //secret keys and the HMAC-SHA1 algorithm. var compositeKey = string.Concat(Uri.EscapeDataString(ConsumerKeySecret), "&", Uri.EscapeDataString(AccessTokenSecret)); string oauthSignature; using (var hasher = new HMACSHA1(Encoding.ASCII.GetBytes(compositeKey))) { oauthSignature = Convert.ToBase64String( hasher.ComputeHash(Encoding.ASCII.GetBytes(signatureBaseString))); } return(oauthSignature); }
/// <summary> /// Get POST response from HTTPWebMethod /// </summary> /// <param name="resourceUrl"></param> /// <param name="method"></param> /// <param name="requestParameters"></param> /// <returns></returns> private string GetResponse(string resourceUrl, TwitterMethod method, SortedDictionary <string, string> requestParameters) { ServicePointManager.Expect100Continue = false; WebRequest request = null; string resultString = string.Empty; if (method == TwitterMethod.GET) { request = (HttpWebRequest)WebRequest.Create(resourceUrl + "?" + requestParameters.ToTwitterWebString()); request.Method = method.ToString(); } if (request != null) { var authHeader = CreateHeader(resourceUrl, method, requestParameters);//Twitter API - auth token request.Headers.Add("Authorization", authHeader); var response = request.GetResponse(); using (var sd = new StreamReader(response.GetResponseStream())) { resultString = sd.ReadToEnd(); response.Close(); } } return(resultString); }
/// <summary> /// Authorize the Twitter API - request /// </summary> /// <param name="resourceUrl"></param> /// <param name="method"></param> /// <param name="requestParameters"></param> /// <returns></returns> private string CreateHeader(string resourceUrl, TwitterMethod method, SortedDictionary <string, string> requestParameters) { var oauthNonce = CreateOauthNonce(); var oauthTimestamp = CreateOAuthTimestamp(); var oauthSignature = CreateOauthSignature(resourceUrl, method, oauthNonce, oauthTimestamp, requestParameters); //The oAuth signature is then used to generate the Authentication header. const string headerFormat = "OAuth oauth_nonce=\"{0}\", oauth_signature_method =\"{1}\", " + "oauth_timestamp=\"{2}\", oauth_consumer_key =\"{3}\", " + "oauth_token=\"{4}\", oauth_signature =\"{5}\", " + "oauth_version=\"{6}\""; var authHeader = string.Format(headerFormat, Uri.EscapeDataString(oauthNonce), Uri.EscapeDataString(OauthSignatureMethod), Uri.EscapeDataString(oauthTimestamp), Uri.EscapeDataString(ConsumerKey), Uri.EscapeDataString(AccessToken), Uri.EscapeDataString(oauthSignature), Uri.EscapeDataString(OauthVersion) ); return(authHeader); }