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