/// <summary> /// Converts the specified HTTP request data into a standard form appropriate for signing. /// </summary> /// <param name="request">The HTTP request that needs to be signed.</param> /// <param name="accountName">The name of the storage account that the HTTP request will access.</param> /// <returns>The canonicalized string containing the HTTP request data in a standard form appropriate for signing.</returns> /// <seealso href="http://msdn.microsoft.com/en-us/library/windowsazure/dd179428.aspx">Authentication for the Windows Azure Storage Services</seealso> public string CanonicalizeHttpRequest(HttpWebRequest request, string accountName) { CommonUtility.AssertNotNull("request", request); // Add the method (GET, POST, PUT, or HEAD). CanonicalizedString canonicalizedString = new CanonicalizedString(request.Method); // Add the Content-* HTTP headers. Empty values are allowed. canonicalizedString.AppendCanonicalizedElement(request.Headers[HttpRequestHeader.ContentEncoding]); canonicalizedString.AppendCanonicalizedElement(request.Headers[HttpRequestHeader.ContentLanguage]); AuthenticationUtility.AppendCanonicalizedContentLengthHeader(canonicalizedString, request); canonicalizedString.AppendCanonicalizedElement(request.Headers[HttpRequestHeader.ContentMd5]); canonicalizedString.AppendCanonicalizedElement(request.ContentType); // Add the Date HTTP header (only if the x-ms-date header is not being used) AuthenticationUtility.AppendCanonicalizedDateHeader(canonicalizedString, request); // Add If-* headers and Range header canonicalizedString.AppendCanonicalizedElement(request.Headers[HttpRequestHeader.IfModifiedSince]); canonicalizedString.AppendCanonicalizedElement(request.Headers[HttpRequestHeader.IfMatch]); canonicalizedString.AppendCanonicalizedElement(request.Headers[HttpRequestHeader.IfNoneMatch]); canonicalizedString.AppendCanonicalizedElement(request.Headers[HttpRequestHeader.IfUnmodifiedSince]); canonicalizedString.AppendCanonicalizedElement(request.Headers[HttpRequestHeader.Range]); // Add any custom headers AuthenticationUtility.AppendCanonicalizedCustomHeaders(canonicalizedString, request); // Add the canonicalized URI element string resourceString = AuthenticationUtility.GetCanonicalizedResourceString(request.RequestUri, accountName); canonicalizedString.AppendCanonicalizedElement(resourceString); return(canonicalizedString.ToString()); }
public string CanonicalizeHttpRequest(HttpRequestMessage request, string accountName) { // Add the method (GET, POST, PUT, or HEAD). CanonicalizedString canonicalizedString = new CanonicalizedString(request.Method.Method, ExpectedCanonicalizedStringLength); // Add the Content-* HTTP headers. Empty values are allowed. if (request.Content != null) { canonicalizedString.AppendCanonicalizedElement((request.Content.Headers.ContentMD5 == null) ? null : Convert.ToBase64String(request.Content.Headers.ContentMD5)); canonicalizedString.AppendCanonicalizedElement((request.Content.Headers.ContentType == null) ? null : request.Content.Headers.ContentType.ToString()); } else { canonicalizedString.AppendCanonicalizedElement(null); canonicalizedString.AppendCanonicalizedElement(null); } // Add the Date HTTP header (or the x-ms-date header if it is being used) AuthenticationUtility.AppendCanonicalizedDateHeader(canonicalizedString, request, true); // Add the canonicalized URI element string resourceString = AuthenticationUtility.GetCanonicalizedResourceString(request.RequestUri, accountName, true); canonicalizedString.AppendCanonicalizedElement(resourceString); return(canonicalizedString.ToString()); }
/// <summary> /// Converts the specified HTTP request data into a standard form appropriate for signing. /// </summary> /// <param name="request">The HTTP request that needs to be signed.</param> /// <param name="accountName">The name of the storage account that the HTTP request will access.</param> /// <returns>The canonicalized string containing the HTTP request data in a standard form appropriate for signing.</returns> /// <seealso href="http://msdn.microsoft.com/en-us/library/Azure/dd179428.aspx">Authentication for the Microsoft Azure Storage Services</seealso> public string CanonicalizeHttpRequest(HttpRequestMessage request, string accountName) { CommonUtility.AssertNotNull("request", request); // Add the method (GET, POST, PUT, or HEAD). CanonicalizedString canonicalizedString = new CanonicalizedString(request.Method.Method, ExpectedCanonicalizedStringLength); // Add the Content-* HTTP headers. Empty values are allowed. if (request.Content != null) { canonicalizedString.AppendCanonicalizedElement((request.Content.Headers.ContentMD5 == null) ? null : Convert.ToBase64String(request.Content.Headers.ContentMD5)); //canonicalizedString.AppendCanonicalizedElement(HttpRequestParsers.GetContentCRC64(request)); // should be covered by custom headers canonicalizedString.AppendCanonicalizedElement((request.Content.Headers.ContentType == null) ? null : request.Content.Headers.ContentType.ToString()); } else { canonicalizedString.AppendCanonicalizedElement(null); canonicalizedString.AppendCanonicalizedElement(null); } // Add the Date HTTP header (only if the x-ms-date header is not being used) AuthenticationUtility.AppendCanonicalizedDateHeader(canonicalizedString, request); // Add any custom headers AuthenticationUtility.AppendCanonicalizedCustomHeaders(canonicalizedString, request); // Add the canonicalized URI element string resourceString = AuthenticationUtility.GetCanonicalizedResourceString(request.RequestUri, accountName, true); canonicalizedString.AppendCanonicalizedElement(resourceString); return(canonicalizedString.ToString()); }
public string CanonicalizeHttpRequest(HttpRequestMessage request, string accountName) { // Add the method (GET, POST, PUT, or HEAD). CanonicalizedString canonicalizedString = new CanonicalizedString(request.Method.Method); // Add the Content-* HTTP headers. Empty values are allowed. if (request.Content != null) { canonicalizedString.AppendCanonicalizedElement(HttpWebUtility.CombineHttpHeaderValues(request.Content.Headers.ContentEncoding)); canonicalizedString.AppendCanonicalizedElement(HttpWebUtility.CombineHttpHeaderValues(request.Content.Headers.ContentLanguage)); AuthenticationUtility.AppendCanonicalizedContentLengthHeader(canonicalizedString, request); canonicalizedString.AppendCanonicalizedElement((request.Content.Headers.ContentMD5 == null) ? null : Convert.ToBase64String(request.Content.Headers.ContentMD5)); canonicalizedString.AppendCanonicalizedElement((request.Content.Headers.ContentType == null) ? null : request.Content.Headers.ContentType.ToString()); } else { canonicalizedString.AppendCanonicalizedElement(null); canonicalizedString.AppendCanonicalizedElement(null); if (request.Method == HttpMethod.Put || request.Method == HttpMethod.Delete) { canonicalizedString.AppendCanonicalizedElement("0"); } else { canonicalizedString.AppendCanonicalizedElement(null); } canonicalizedString.AppendCanonicalizedElement(null); canonicalizedString.AppendCanonicalizedElement(null); } // Add the Date HTTP header (only if the x-ms-date header is not being used) AuthenticationUtility.AppendCanonicalizedDateHeader(canonicalizedString, request); // Add If-* headers and Range header canonicalizedString.AppendCanonicalizedElement(AuthenticationUtility.GetCanonicalizedHeaderValue(request.Headers.IfModifiedSince)); canonicalizedString.AppendCanonicalizedElement(CommonUtility.GetFirstHeaderValue(request.Headers.IfMatch)); canonicalizedString.AppendCanonicalizedElement(CommonUtility.GetFirstHeaderValue(request.Headers.IfNoneMatch)); canonicalizedString.AppendCanonicalizedElement(AuthenticationUtility.GetCanonicalizedHeaderValue(request.Headers.IfUnmodifiedSince)); canonicalizedString.AppendCanonicalizedElement((request.Headers.Range == null) ? null : CommonUtility.GetFirstHeaderValue(request.Headers.Range.Ranges)); // Add any custom headers AuthenticationUtility.AppendCanonicalizedCustomHeaders(canonicalizedString, request); // Add the canonicalized URI element string resourceString = AuthenticationUtility.GetCanonicalizedResourceString(request.RequestUri, accountName); canonicalizedString.AppendCanonicalizedElement(resourceString); return(canonicalizedString.ToString()); }
/// <summary> /// Converts the specified HTTP request data into a standard form appropriate for signing. /// </summary> /// <param name="request">The HTTP request that needs to be signed.</param> /// <param name="accountName">The name of the storage account that the HTTP request will access.</param> /// <returns>The canonicalized string containing the HTTP request data in a standard form appropriate for signing.</returns> /// <seealso href="http://msdn.microsoft.com/en-us/library/windowsazure/dd179428.aspx">Authentication for the Windows Azure Storage Services</seealso> public string CanonicalizeHttpRequest(HttpWebRequest request, string accountName) { // Add the method (GET, POST, PUT, or HEAD). CanonicalizedString canonicalizedString = new CanonicalizedString(request.Method, ExpectedCanonicalizedStringLength); // Add the Content-* HTTP headers. Empty values are allowed. canonicalizedString.AppendCanonicalizedElement(request.Headers[HttpRequestHeader.ContentMd5]); canonicalizedString.AppendCanonicalizedElement(request.ContentType); // Add the Date HTTP header (or the x-ms-date header if it is being used) AuthenticationUtility.AppendCanonicalizedDateHeader(canonicalizedString, request, true); // Add the canonicalized URI element string resourceString = AuthenticationUtility.GetCanonicalizedResourceString(request.Address, accountName, true); canonicalizedString.AppendCanonicalizedElement(resourceString); return(canonicalizedString.ToString()); }
/// <summary> /// Converts the specified HTTP request data into a standard form appropriate for signing. /// </summary> /// <param name="request">The HTTP request that needs to be signed.</param> /// <param name="accountName">The name of the storage account that the HTTP request will access.</param> /// <returns>The canonicalized string containing the HTTP request data in a standard form appropriate for signing.</returns> /// <seealso href="http://msdn.microsoft.com/en-us/library/windowsazure/dd179428.aspx">Authentication for the Windows Azure Storage Services</seealso> public string CanonicalizeHttpRequest(HttpWebRequest request, string accountName) { CommonUtility.AssertNotNull("request", request); // Add the method (GET, POST, PUT, or HEAD). CanonicalizedString canonicalizedString = new CanonicalizedString(request.Method, ExpectedCanonicalizedStringLength); // Add the Content-* HTTP headers. Empty values are allowed. canonicalizedString.AppendCanonicalizedElement(request.Headers[HttpRequestHeader.ContentMd5]); canonicalizedString.AppendCanonicalizedElement(request.ContentType); // Add the Date HTTP header (only if the x-ms-date header is not being used) AuthenticationUtility.AppendCanonicalizedDateHeader(canonicalizedString, request); // Add any custom headers AuthenticationUtility.AppendCanonicalizedCustomHeaders(canonicalizedString, request); // Add the canonicalized URI element string resourceString = AuthenticationUtility.GetCanonicalizedResourceString(request.RequestUri, accountName, true); canonicalizedString.AppendCanonicalizedElement(resourceString); return canonicalizedString.ToString(); }