/** * 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); } }