Я получаю эту ошибку:
<Error>
<Code>AuthenticationFailed</Code>
<Message>
Server failed to authenticate the request. Make sure the value of Authorization header is formed correctly including the signature. RequestId:6c3fc9a8-cdf6-4874-a141-10282b709022 Time:2014-07-30T10:48:43.8634735Z
</Message>
<AuthenticationErrorDetail>
Signature did not match. String to sign used was rwl 2014-07-31T04:48:20Z /acoustie/$root 2014-02-14
</AuthenticationErrorDetail>
</Error>
Я получаю его, когда я создаю sas (Signal Access Signature), затем вставляю этот sas в конец контейнера uri в браузер. Это полный адрес сгенерированных sas:
https://acoustie.blob.core.windows.net/mark?sv=2014-02-14&sr=c&sig=E6w%2B3B8bAXK8Lhvvr62exec5blSxsA62aSWAg7rmX4g%3D&se=2014-07-30T13%3A30%3A14Z&sp=rwl
Я пробовал SO и Google и пытался много комбинаций, насколько я могу судить, что я все делаю правильно, я знаю, что нет, я просто не вижу этого... действительно надеюсь, что кто-то может помочь:\
Чтобы быть ясным, я создаю sas на контейнере, а не конкретный blob, а не в корневом контейнере. Доступ к blob определяется как Public Blob. Моя конечная цель - просто разрешить запись в контейнер с помощью sas, а "отладка" я добавил большинство разрешений для SharedAccessBlobPolicy.
Я попытался добавить a\в начало и конец имени контейнера. Без изменений.
Это код, который я использую для генерации sas:
var blobClient = storageAccount.CreateCloudBlobClient();
//Get a reference to the blob container
var container = blobClient.GetContainerReference(containerName);
// Do not set start time so the sas becomes valid immediately.
var sasConstraints = new SharedAccessBlobPolicy
{
SharedAccessExpiryTime = DateTime.UtcNow.AddMinutes(30),
Permissions = SharedAccessBlobPermissions.Write
| SharedAccessBlobPermissions.Read
| SharedAccessBlobPermissions.List,
};
var sasContainerToken = container.GetSharedAccessSignature(sasConstraints);
//Return the URI string for the container, including the SAS token.
var sas = string.Format("{0}{1}", container.Uri.AbsoluteUri, sasContainerToken);
Logger.Debug("SAS: {0}", sas);
return sas;
Он генерирует подпись, он просто не является действительной сигнатурой.
Я пробовал разные контейнеры, меняя политику доступа, с и без времени запуска, продлевая срок действия до> 12 часов (я нахожусь в часовом поясе UTC + 10), кажется, не имеет значения, что я меняю приводит к тому, что ошибка "подпись не соответствует".
Я даже пытался использовать более старую версию "WindowsAzure.Storage", поэтому я теперь попробовал 4.2 и 4.1. Даже попробовал ури в другом браузере, на самом деле не стоит ничего менять, но эй...
Любые предложения приветствуются :-)