The original OAuth code from http://eran.sandler.co.il/, hosted at http://oauth.net Modified only to change namespace. Written by Eran Sandler (http://eran.sandler.co.il) Edited by Claudio Cherubino and Alain Vongsouvanh
        /// <summary>
        /// Contacts Google for a request token, first step of the OAuth authentication process.
        /// When successful, updates the OAuthParameter instance passed as parameter by setting
        /// Token and TokenSecret.
        /// </summary>
        /// <param name="parameters">The OAuth parameters</param>
        public static void GetUnauthorizedRequestToken(OAuthParameters parameters)
        {
            Uri requestUri = new Uri(string.Format("{0}?scope={1}", requestTokenUrl, OAuthBase.EncodingPerRFC3986(parameters.Scope)));

            // callback is only needed when getting the request token
            bool callbackExists = false;

            if (!string.IsNullOrEmpty(parameters.Callback))
            {
                parameters.BaseProperties.Add(OAuthBase.OAuthCallbackKey, parameters.Callback);
                callbackExists = true;
            }

            string     headers = GenerateHeader(requestUri, "GET", parameters);
            WebRequest request = WebRequest.Create(requestUri);

            request.Headers.Add(headers);

            WebResponse response = request.GetResponse();
            string      result   = "";

            if (response != null)
            {
                Stream       responseStream = response.GetResponseStream();
                StreamReader reader         = new StreamReader(responseStream);
                result = reader.ReadToEnd();
            }

            if (callbackExists)
            {
                parameters.BaseProperties.Remove(OAuthBase.OAuthCallbackKey);
            }

            // split results and update parameters
            SortedDictionary <string, string> responseValues = OAuthBase.GetQueryParameters(result);

            parameters.Token       = responseValues[OAuthBase.OAuthTokenKey];
            parameters.TokenSecret = responseValues[OAuthBase.OAuthTokenSecretKey];
        }
 /// <summary>
 /// Refresh the OAuth 2.0 access token.
 /// When successful, updates the OAuthParameter instance passed as parameter by setting
 /// AccessToken, RefreshToken and TokenExpiry.
 /// </summary>
 /// <param name="parameters">The OAuth 2.0 parameters</param>
 public static void RefreshAccessToken(OAuth2Parameters parameters)
 {
     OAuthBase.GetOAuth2AccessToken(parameters, OAuthBase.GetRefreshAccessTokenRequestBody(parameters));
 }
 /// <summary>
 /// Exchanges the user-authorized request token for an OAuth 2.0 access token.
 /// When successful, updates the OAuthParameter instance passed as parameter by setting
 /// AccessToken, RefreshToken and TokenExpiry.
 /// </summary>
 /// <param name="parameters">The OAuth 2.0 parameters</param>
 public static void GetAccessToken(OAuth2Parameters parameters)
 {
     OAuthBase.GetOAuth2AccessToken(parameters, OAuthBase.GetExchangeAccessCodeRequestBody(parameters));
 }