private string GetAuthenticationHeaderForRequest(Uri requestUri, HttpMethod method, Dictionary <String, String> postvars) { List <KeyValuePair <string, string> > parameters = new List <KeyValuePair <string, string> >() { new KeyValuePair <string, string>(Constants.oauth_consumer_key, _apiKey), new KeyValuePair <string, string>(Constants.oauth_nonce, OAuthHelpers.GenerateNonce()), new KeyValuePair <string, string>(Constants.oauth_timestamp, OAuthHelpers.GenerateTimestamp()), new KeyValuePair <string, string>(Constants.oauth_signature_method, "HMAC-SHA1"), new KeyValuePair <string, string>(Constants.oauth_version, Constants.oauth_version_1a), new KeyValuePair <string, string>(Constants.oauth_token, _authToken), }; if (postvars != null) { foreach (var item in postvars) { parameters.Add(new KeyValuePair <string, string>(item.Key, item.Value)); } // reset parameters for future calls _parameters = null; } string baseUri = requestUri.OriginalString; // We need to handle the case where the request comes with query parameters if (!string.IsNullOrEmpty(requestUri.Query)) { baseUri = requestUri.OriginalString.Replace(requestUri.Query, ""); foreach (var param in requestUri.Query.Split(new char[] { '?', '&' }, StringSplitOptions.RemoveEmptyEntries)) { var values = param.Split('='); string name = values[0]; string value = string.Empty; if (values.Length > 1) { value = values[1]; } parameters.Add(new KeyValuePair <string, string>(Uri.UnescapeDataString(name), Uri.UnescapeDataString(value))); } } string baseString = OAuthHelpers.GenerateBaseString(baseUri, method.ToString(), parameters); string sig = OAuthHelpers.EncodeValue(OAuthHelpers.GenerateHMACDigest(baseString, _secret, _authTokenSecret)); parameters.Add(new KeyValuePair <string, string>(Constants.oauth_signature, sig)); StringBuilder sb = new StringBuilder(); foreach (var param in parameters) { if (param.Key.StartsWith("oauth")) { sb.AppendFormat("{0}={1},", param.Key, System.Net.WebUtility.HtmlEncode(param.Value)); } } sb.Remove(sb.Length - 1, 1); return(sb.ToString()); }
private string CreateRequest(string url, string method, string tokSecret, params object[] args) { SortedSet <KeyValuePair <string, string> > parameters = new SortedSet <KeyValuePair <string, string> >(new OAuthParameterComparer()) { new KeyValuePair <string, string>(Constants.oauth_consumer_key, _apiKey), new KeyValuePair <string, string>(Constants.oauth_nonce, OAuthHelpers.GenerateNonce()), new KeyValuePair <string, string>(Constants.oauth_timestamp, OAuthHelpers.GenerateTimestamp()), new KeyValuePair <string, string>(Constants.oauth_signature_method, "HMAC-SHA1"), }; if (!string.IsNullOrEmpty(_oauthVersion)) { parameters.Add(new KeyValuePair <string, string>(Constants.oauth_version, _oauthVersion)); } for (int i = 0; i < args.Length; i += 2) { parameters.Add(new KeyValuePair <string, string>(args[i].ToString(), args[i + 1].ToString())); } string baseString = OAuthHelpers.GenerateBaseString(url, method, parameters); string sig = OAuthHelpers.EncodeValue(OAuthHelpers.GenerateHMACDigest(baseString, OAuthHelpers.CreateHashKeyBytes(_secret, tokSecret))); parameters.Add(new KeyValuePair <string, string>(Constants.oauth_signature, sig)); StringBuilder sb = new StringBuilder(); foreach (var param in parameters) { sb.AppendFormat("{0}={1}&", param.Key, System.Net.WebUtility.HtmlEncode(param.Value)); } sb.Remove(sb.Length - 1, 1); return(sb.ToString()); }
public OAuthMessageHandler(string apiKey, string secret, string authToken, string authTokenSecret, IOAuthSignatureData provider) { _apiKey = apiKey; _secret = secret; _authToken = authToken; _authTokenSecret = authTokenSecret; _signatureDataProvider = provider; _hmacSha1Param = new KeyValuePair <string, string>(Constants.oauth_signature_method, "HMAC-SHA1"); _apiKeyParam = new KeyValuePair <string, string>(Constants.oauth_consumer_key, _apiKey); _authTokenParam = new KeyValuePair <string, string>(Constants.oauth_token, _authToken); // Construct the OAuthVersion parameter based on the requested version. _oauthVersionParam = new KeyValuePair <string, string>(Constants.oauth_version, _signatureDataProvider.GetOAuthVersion()); _keyBytes = OAuthHelpers.CreateHashKeyBytes(_secret, _authTokenSecret); this.InnerHandler = new HttpClientHandler(); }
public OAuthAuthenticator(string apiKey, string secret, OAuthVersion oauthVersion) { _apiKey = apiKey; _secret = secret; _oauthVersion = OAuthHelpers.GetOAuthVersionAsString(oauthVersion); }
private async Task <string> GetAuthenticationHeaderForRequest(HttpRequestMessage request) { Uri requestUri = request.RequestUri; HttpMethod method = request.Method; List <KeyValuePair <string, string> > parameters = new List <KeyValuePair <string, string> >() { new KeyValuePair <string, string>(Constants.oauth_consumer_key, _apiKey), new KeyValuePair <string, string>(Constants.oauth_nonce, OAuthHelpers.GenerateNonce()), new KeyValuePair <string, string>(Constants.oauth_timestamp, OAuthHelpers.GenerateTimestamp()), new KeyValuePair <string, string>(Constants.oauth_signature_method, "HMAC-SHA1"), new KeyValuePair <string, string>(Constants.oauth_version, Constants.oauth_version_1a), new KeyValuePair <string, string>(Constants.oauth_token, _authToken), }; string baseUri = requestUri.OriginalString; // We need to handle the case where the request comes with query parameters, in URL or in body string queryString = string.Empty; if (!string.IsNullOrEmpty(requestUri.Query)) { baseUri = requestUri.OriginalString.Replace(requestUri.Query, ""); queryString = requestUri.Query; } if (request.Content.Headers.ContentType.MediaType == "application/x-www-form-urlencoded") { string requestContent = await request.Content.ReadAsStringAsync(); queryString = $"{queryString}&{requestContent}"; } foreach (var param in queryString.Split(new char[] { '?', '&' }, StringSplitOptions.RemoveEmptyEntries)) { var values = param.Split('='); string name = Uri.UnescapeDataString(values[0]); name = name.Replace('+', ' '); string value = string.Empty; if (values.Length > 1) { value = Uri.UnescapeDataString(values[1]); value = value.Replace('+', ' '); } parameters.Add(new KeyValuePair <string, string>(name, value)); } string baseString = OAuthHelpers.GenerateBaseString(baseUri, method.ToString(), parameters); string sig = OAuthHelpers.EncodeValue(OAuthHelpers.GenerateHMACDigest(baseString, _secret, _authTokenSecret)); parameters.Add(new KeyValuePair <string, string>(Constants.oauth_signature, sig)); StringBuilder sb = new StringBuilder(); foreach (var param in parameters) { if (param.Key.StartsWith("oauth")) { sb.AppendFormat("{0}={1},", param.Key, System.Net.WebUtility.HtmlEncode(param.Value)); } } sb.Remove(sb.Length - 1, 1); return(sb.ToString()); }
private async Task <string> GetAuthenticationHeaderForRequest(HttpRequestMessage request) { SortedSet <KeyValuePair <string, string> > parameters = new SortedSet <KeyValuePair <string, string> >(new OAuthParameterComparer()) { // Re-use the parameters that don't change _apiKeyParam, _hmacSha1Param, _authTokenParam, // Add the parameters that are unique for each call new KeyValuePair <string, string>(Constants.oauth_nonce, _signatureDataProvider.GetNonce()), new KeyValuePair <string, string>(Constants.oauth_timestamp, _signatureDataProvider.GetTimeStamp()), }; // if we have specified the OAuthVersion, add it! if (!string.IsNullOrEmpty(_oauthVersionParam.Value)) { parameters.Add(_oauthVersionParam); } Uri requestUri = request.RequestUri; string baseUri = requestUri.OriginalString; // We need to handle the case where the request comes with query parameters, in URL or in body string queryString = string.Empty; if (!string.IsNullOrEmpty(requestUri.Query)) { baseUri = requestUri.OriginalString.Replace(requestUri.Query, ""); queryString = requestUri.Query; } // concatenate the content with the request content if the media type says we should. if (StringComparer.OrdinalIgnoreCase.Equals(request.Content?.Headers.ContentType?.MediaType, Constants.ContentType)) { string requestContent = await request.Content.ReadAsStringAsync(); if (string.IsNullOrEmpty(queryString)) { queryString = requestContent; } else { queryString = $"{queryString}&{requestContent}"; } } if (!string.IsNullOrEmpty(queryString)) { ParseParameters(parameters, queryString); } string baseString = OAuthHelpers.GenerateBaseString(baseUri, request.Method.ToString(), parameters); string sig = OAuthHelpers.EncodeValue(OAuthHelpers.GenerateHMACDigest(baseString, _keyBytes)); parameters.Add(new KeyValuePair <string, string>(Constants.oauth_signature, sig)); StringBuilder sb = new StringBuilder(); foreach (var param in parameters) { if (param.Key.StartsWith("oauth")) { sb.AppendFormat("{0}={1},", param.Key, System.Net.WebUtility.HtmlEncode(param.Value)); } } sb.Remove(sb.Length - 1, 1); return(sb.ToString()); }