Я хочу сгенерировать токен 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
?