Example #1
0
        /**
         * Signs the given request with the given client credential.
         *
         * @param request the request to sign.
         * @param credential the credential used in the signing.
         * @return the signed request.
         * @throws RequestSigningException
         */

        public HttpRequestMessage Sign(HttpRequestMessage request, IClientCredential credential)
        {
            string timeStamp = GetTimeStamp(DateTime.UtcNow);

            StringBuilder sb = new StringBuilder();

            sb.Append(Algorithm);
            sb.Append(' ');
            sb.Append(AuthClientTokenName);
            sb.Append('=');
            sb.Append(credential.ClientToken);
            sb.Append(';');

            sb.Append(AuthAccessTokenName);
            sb.Append('=');
            sb.Append(credential.AccessToken);
            sb.Append(';');

            sb.Append(AuthTimestampName);
            sb.Append('=');
            sb.Append(timeStamp);
            sb.Append(';');

            string nonce = Guid.NewGuid().ToString();

            sb.Append(AuthNonceName);
            sb.Append('=');
            sb.Append(nonce);
            sb.Append(';');

            string authData = sb.ToString();

            try
            {
                string clientSecret = credential.ClientSecret;

                byte[] signingKeyBytes = Sign(timeStamp, Encoding.GetEncoding(Charset).GetBytes(clientSecret), HmacAlg);
                string signingKey      = Convert.ToBase64String(signingKeyBytes);

                CanonicalizerHelper requestResult  = GetCanonicalizedRequest(request);
                HttpRequestMessage  updatedRequest = requestResult.Request;

                string requestData = requestResult.CanonicalizedData;

                StringBuilder signData = new StringBuilder(requestData);
                signData.Append(authData);

                string stringToSign = signData.ToString();

                //if (LOGGER.isDebugEnabled()) {
                //	LOGGER.debug(String.format("String to sign : '%s'", stringToSign));
                //}

                byte[] signatureBytes = Sign(stringToSign, Encoding.GetEncoding(Charset).GetBytes(signingKey), HmacAlg);
                string signature      = Convert.ToBase64String(signatureBytes);

                //if (LOGGER.isDebugEnabled()) {
                //	LOGGER.debug(String.format("Signature : '%s'", signature));
                //}

                // add the signature
                sb.Append(AuthSignatureName);
                sb.Append('=');
                sb.Append(signature);

                String authHeader = sb.ToString();

                updatedRequest.Headers.Add("Authorization", authHeader);

                return(updatedRequest);
            }
            catch (Exception e)
            {
                throw new RequestSigningException("Failed to sign: invalid string encoding", e);
            }
        }
        /**
         * Signs the given request with the given client credential.
         *
         * @param request the request to sign.
         * @param credential the credential used in the signing.
         * @return the signed request.
         * @throws RequestSigningException
         */
        public HttpRequestMessage Sign(HttpRequestMessage request, IClientCredential credential)
        {
            string timeStamp = GetTimeStamp(DateTime.UtcNow);

            StringBuilder sb = new StringBuilder();
            sb.Append(Algorithm);
            sb.Append(' ');
            sb.Append(AuthClientTokenName);
            sb.Append('=');
            sb.Append(credential.ClientToken);
            sb.Append(';');

            sb.Append(AuthAccessTokenName);
            sb.Append('=');
            sb.Append(credential.AccessToken);
            sb.Append(';');

            sb.Append(AuthTimestampName);
            sb.Append('=');
            sb.Append(timeStamp);
            sb.Append(';');

            string nonce = Guid.NewGuid().ToString();
            sb.Append(AuthNonceName);
            sb.Append('=');
            sb.Append(nonce);
            sb.Append(';');

            string authData = sb.ToString();

            try
            {
                string clientSecret = credential.ClientSecret;

                byte[] signingKeyBytes = Sign(timeStamp, Encoding.GetEncoding(Charset).GetBytes(clientSecret), HmacAlg);
                string signingKey = Convert.ToBase64String(signingKeyBytes);

                CanonicalizerHelper requestResult = GetCanonicalizedRequest(request);
                HttpRequestMessage updatedRequest = requestResult.Request;

                string requestData = requestResult.CanonicalizedData;

                StringBuilder signData = new StringBuilder(requestData);
                signData.Append(authData);

                string stringToSign = signData.ToString();

                //if (LOGGER.isDebugEnabled()) {
                //	LOGGER.debug(String.format("String to sign : '%s'", stringToSign));
                //}

                byte[] signatureBytes = Sign(stringToSign, Encoding.GetEncoding(Charset).GetBytes(signingKey), HmacAlg);
                string signature = Convert.ToBase64String(signatureBytes);

                //if (LOGGER.isDebugEnabled()) {
                //	LOGGER.debug(String.format("Signature : '%s'", signature));
                //}

                // add the signature
                sb.Append(AuthSignatureName);
                sb.Append('=');
                sb.Append(signature);

                String authHeader = sb.ToString();

                updatedRequest.Headers.Add("Authorization", authHeader);

                return updatedRequest;
            }
            catch (Exception e)
            {
                throw new RequestSigningException("Failed to sign: invalid string encoding", e);
            }
        }