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