Exemple #1
0
 static bool VerifySignature(string signature, bool usePrimaryKey, Func <string> stringToSign)
 {
     if (!SharedKeySignature.HasKey(usePrimaryKey))
     {
         return(false);
     }
     else if (signature == SharedKeySignature.GenerateSignature(stringToSign, usePrimaryKey))
     {
         return(true);
     }
     return(false);
 }
Exemple #2
0
 private static bool VerifyRequestAuthorization(string signature, bool usePrimaryKey, bool liteAlgorithm, string method, string uriPath,
                                                RequestHeaders headers, RequestQueryParameters queryParams, string requestDate, string contentLength)
 {
     if (!SharedKeySignature.HasKey(usePrimaryKey))
     {
         return(false);
     }
     else if (signature == GenerateSignature(usePrimaryKey, liteAlgorithm, method, uriPath, headers, queryParams, requestDate, contentLength))
     {
         return(true);
     }
     return(false);
 }
Exemple #3
0
        static string GetCanonicalizedResource(bool liteAlgorithm, string uriPath, RequestQueryParameters queryParams, string accountName)
        {
            string commonPrefix = "/" + accountName + uriPath;

            if (liteAlgorithm)
            {
                var compParam = queryParams.Value <string>("comp");
                return(commonPrefix + (!String.IsNullOrWhiteSpace(compParam) ? "?comp=" + compParam : ""));
            }
            else
            {
                if (queryParams.Any())
                {
                    return(commonPrefix + "\n" + String.Join("\n", queryParams
                                                             .OrderBy(queryParam => queryParam.Key, StringComparer.OrdinalIgnoreCase)
                                                             .Select(queryParam => SharedKeySignature.FormatCanonicalizedValues(queryParam))));
                }
                return(commonPrefix);
            }
        }
Exemple #4
0
        public static string GenerateSignature(bool usePrimaryKey, bool liteAlgorithm, string method, string uriPath,
                                               RequestHeaders headers, RequestQueryParameters queryParams, string requestDate, string contentLength)
        {
            // Signature scheme is described at: http://msdn.microsoft.com/en-us/library/azure/dd179428.aspx
            // and the SDK implementation is at: https://github.com/Azure/azure-storage-net/tree/master/Lib/ClassLibraryCommon/Auth/Protocol
            Func <string> stringToSignFactory = null;

            if (liteAlgorithm)
            {
                stringToSignFactory = () => String.Format("{0}\n{1}\n{2}\n{3}\n{4}\n{5}",
                                                          method,
                                                          headers.Value("Content-MD5", String.Empty),
                                                          headers.Value("Content-Type", String.Empty),
                                                          requestDate,
                                                          SharedKeySignature.GetCanonicalizedHeaders(headers),
                                                          GetCanonicalizedResource(liteAlgorithm, uriPath, queryParams, SharedKeySignature.AccountName));
            }
            else
            {
                stringToSignFactory = () => String.Format("{0}\n{1}\n{2}\n{3}\n{4}\n{5}\n{6}\n{7}\n{8}\n{9}\n{10}\n{11}\n{12}\n{13}",
                                                          method,
                                                          headers.Value("Content-Encoding", String.Empty),
                                                          headers.Value("Content-Language", String.Empty),
                                                          contentLength,
                                                          headers.Value("Content-MD5", String.Empty),
                                                          headers.Value("Content-Type", String.Empty),
                                                          requestDate,
                                                          headers.Value("If-Modified-Since", String.Empty),
                                                          headers.Value("If-Match", String.Empty),
                                                          headers.Value("If-None-Match", String.Empty),
                                                          headers.Value("If-Unmodified-Since", String.Empty),
                                                          headers.Value("Range", String.Empty),
                                                          SharedKeySignature.GetCanonicalizedHeaders(headers),
                                                          GetCanonicalizedResource(liteAlgorithm, uriPath, queryParams, SharedKeySignature.AccountName));
            }
            return(SharedKeySignature.GenerateSignature(stringToSignFactory, usePrimaryKey));
        }