Поля подписи не очень хорошо сформированы. При создании подписи общего доступа - PullRequest
0 голосов
/ 29 апреля 2019

Я хочу сгенерировать токен SAS, используя остальные API, моя версия API - 2017-07-29

Итак здесь строка для подписи описывается так

StringToSign = signedpermissions + "\n" +  
           signedstart + "\n" +  
           signedexpiry + "\n" +  
           canonicalizedresource + "\n" +  
           signedidentifier + "\n" +  
           signedIP + "\n" +  
           signedProtocol + "\n" +  
           signedversion + "\n" +  
           rscc + "\n" +  
           rscd + "\n" +  
           rsce + "\n" +  
           rscl + "\n" +  
           rsct  

Но в документации (на той же странице) также сказано, что параметр signedresource является обязательным, которого нет в приведенной выше строке.Я пытался поставить signedresource после signedversion

StringToSign = signedpermissions + "\n" +  
           signedstart + "\n" +  
           signedexpiry + "\n" +  
           canonicalizedresource + "\n" +  
           signedidentifier + "\n" +  
           signedIP + "\n" +  
           signedProtocol + "\n" +  
           signedversion + "\n" +  
           signedResource + "\n"
           rscc + "\n" +  
           rscd + "\n" +  
           rsce + "\n" +  
           rscl + "\n" +  
           rsct 

Моя полная функция

        public static string CreateSAS(DateTime signedStart , DateTime signedExpiry, string docAzureLocation)
        {
            string a = signedStart.ToString("yyyy-MM-dd");
            string b = signedExpiry.ToString("yyyy-MM-dd");
            string canonicalizedresource = "/blob" + docAzureLocation.Substring(7);

            string stringToSign = "r\n" +
                             /*a +*/ "\n" +
                             b + "\n" +
                             canonicalizedresource + "\n" +
                             "\n" +
                             "\n" +
                             "\n" +
                             AzureApiVersion + "\n" +
                             "b\n" +
                             "\n" + 
                             "\n" +
                             "\n" +
                             "\n" +
                             "";

            string signature;

            using (var hmacSha256 = new HMACSHA256(Convert.FromBase64String(APP_SETTINGS.StorageKey)))
            {
                var dataToHmac = Encoding.UTF8.GetBytes(stringToSign);
                signature = Convert.ToBase64String(hmacSha256.ComputeHash(dataToHmac));
            }

            string query = string.Format("se={0}&sp=r&sv={1}&sr=b&sig={2}", b, AzureApiVersion,  signature);
            return query;
        }


И после этого я получаю ошибку Signature fields not well formed.Так что мой вопрос, как генерировать правильные stringToSign?

...