/// <summary> /// Canonicalizes the HTTP request. /// </summary> /// <param name="request">A web request.</param> /// <param name="accountName">The name of the storage account.</param> /// <returns>The canonicalized string for the request.</returns> public override string CanonicalizeHttpRequest(HttpWebRequest request, string accountName) { return(CanonicalizationStrategy.CanonicalizeHttpRequest( request.Address, accountName, request.Method, request.ContentType, string.Empty, request.Headers)); }
/// <summary> /// Signs the request appropriately to make it an authenticated request for Blob and Queue. /// </summary> /// <param name="request">The request.</param> /// <param name="credentials">The credentials.</param> internal static void SignRequestForBlobAndQueue(HttpWebRequest request, Credentials credentials) { // Add the date header to the request string dateString = ConvertDateTimeToHttpString(DateTime.UtcNow); request.Headers.Add("x-ms-date", dateString); // Compute the signature and add the authentication scheme CanonicalizationStrategy canonicalizer = CanonicalizationStrategyFactory.GetBlobQueueFullCanonicalizationStrategy(request); string message = canonicalizer.CanonicalizeHttpRequest(request, credentials.AccountName); string computedBase64Signature = StorageKey.ComputeMacSha256(credentials.Key, message); request.Headers.Add( "Authorization", string.Format(CultureInfo.InvariantCulture, "{0} {1}:{2}", "SharedKey", credentials.SigningAccountName, computedBase64Signature)); }