I-Code verwenden aus diesem MSDN-Artikel kopiert und geändert:Azure Blob 403 Forbidden SAS mit erstellen und verwenden BlobContainer
MSDN article about Azure SAS usage
ich die Azure Storage Emulator bin mit und kann die SAS erzeugen. Hier ein Beispiel:
http://127.0.0.1:10000/devstoreaccount1/7373df60-ad5f-462e-a55d-15c21c2de0e1?sv=2015-04-05&sr=c&si=ac&sig=bQAsuNUsj6MycN0aTyurVugHBMOlokwsXJA9xv7VeiU%3D
kann ich den Edge-Browser verwenden, um die Blob-Container zur Liste von Anhängen:
&comp=list&restype=container
so dass meine Verbindung sieht nun wie folgt aus:
http://127.0.0.1:10000/devstoreaccount1/7373df60-ad5f-462e-a55d-15c21c2de0e1?sv=2015-04-05&sr=c&si=ac&sig=bQAsuNUsj6MycN0aTyurVugHBMOlokwsXJA9xv7VeiU%3D&comp=list&restype=container
Diese lässt mich denken, dass der SAS korrekt ist und der Speicheremulator funktioniert. Der Browser zeigt die Informationen für den Container und alle darin enthaltenen Blobs an.
Ich kann den Speicher Emulator Protokoll überprüfen und diese Meldung sehen:
4/21/2016 3:56:10 PM [AuthorizationFailure] [ActivityId=a79d230e-6596-4e43-8ef9-58943ee91b58] Unauthorized: Signed access not supported for this request with FailureReason InvalidOperationSAS
Hier ist der Code, dass ich die SAS erstellen verwenden:
String policyName = "ac";
var storedPolicy = new SharedAccessBlobPolicy()
{
SharedAccessExpiryTime = DateTime.UtcNow.AddHours(expireHours),
Permissions = SharedAccessBlobPermissions.Read |
SharedAccessBlobPermissions.List |
SharedAccessBlobPermissions.Delete
};
var permissions = container.GetPermissions();
permissions.SharedAccessPolicies.Clear();
permissions.SharedAccessPolicies.Add(policyName, storedPolicy);
container.SetPermissions(permissions);
string sasContainerToken = container.GetSharedAccessSignature(null, policyName);
// Return the URI string for the container, including the SAS token.
return container.Uri + sasContainerToken;
Und hier ist der Code, den ich benutze
CloudBlobContainer container = new CloudBlobContainer(new Uri(sas)); // AzureBlob.GetBlobContainer(sas); // gets a new container
if (! container.Exists()) // throws exception
{
throw new Exception("Container no longer exists for sas " + sas);
}
container.FetchAttributes();
Hier ist die Ausnahme: die CloudBlobContainer mit der SAS erstellen
Microsoft.WindowsAzure.Storage.StorageException: The remote server returned an error: (403) Forbidden. ---> System.Net.WebException: The remote server returned an error: (403) Forbidden.
at System.Net.HttpWebRequest.GetResponse()
at Microsoft.WindowsAzure.Storage.Core.Executor.Executor.ExecuteSync[T](RESTCommand`1 cmd, IRetryPolicy policy, OperationContext operationContext) in c:\\Program Files (x86)\\Jenkins\\workspace\\release_dotnet_master\\Lib\\ClassLibraryCommon\\Core\\Executor\\Executor.cs:line 677
--- End of inner exception stack trace ---
at Microsoft.WindowsAzure.Storage.Core.Executor.Executor.ExecuteSync[T](RESTCommand`1 cmd, IRetryPolicy policy, OperationContext operationContext) in c:\\Program Files (x86)\\Jenkins\\workspace\\release_dotnet_master\\Lib\\ClassLibraryCommon\\Core\\Executor\\Executor.cs:line 604
at Microsoft.WindowsAzure.Storage.Blob.CloudBlobContainer.Exists(Boolean primaryOnly, BlobRequestOptions requestOptions, OperationContext operationContext) in c:
\\Program Files (x86)\\Jenkins\\workspace\\release_dotnet_master\\Lib\\ClassLibraryCommon\\Blob\\CloudBlobContainer.cs:line 1406
at Microsoft.WindowsAzure.Storage.Blob.CloudBlobContainer.Exists(BlobRequestOptions requestOptions, OperationContext operationContext) in c:\\Program Files (x86)\\Jenkins\\workspace\\release_dotnet_master\\Lib\\ClassLibraryCommon\\Blob\\CloudBlobContainer.cs:line 1393
Hier ist ein Link zu einem Artikel, der ein entfernter Verwandter zu sein scheint.
Hallo, Gaurav! Vielen Dank für Ihre Hilfe. Ich habe eine Fehlermeldung erhalten, bis ich diese Zeile geändert habe 'var containerUri = string.Format ("{0}/{1}", storageAccount.BlobEndpoint, containername); 'Ich habe geändert, um Berechtigungen zum Lesen, Schreiben, Erstellen, Auflisten hinzuzufügen. und Löschen Aber wenn ich versuche, einen Blob in den Container hochzuladen, bekomme ich 403 Verboten. Mein bestehender Code funktionierte gut zum Erstellen des Containers und zum Hochladen der Blobs. Meine Frage ist, kann ich die Berechtigungen anwenden und die SAS, nachdem ich den Container erstellen und die Blobs hochladen? Wenn nicht, wie vermeide ich den Fehler 403 beim Versuch, die Blobs hochzuladen? – Pete
Ok, ich habe es einen Schritt weiter gemacht. Ich habe 'SharedAccessResourceTypes.Blob' hinzugefügt und konnte Blobs in den neuen Container hochladen. Das sas sieht so aus: http://127.0.0.1:10000/devstoreaccount1/45a56968-459a-4a65-995d-06e233e1d015?sv=2015-04-05&sig=zXJC6hIjD77c3b1oKZWlW9YtuHMF78zR7NxVc%2FcYMQs%3D&se=2016-04-22T17%3A20% 3A40Z & srt = co & ss = b & sp = rcwdl' Wenn ich versuche, diese sas in einem anderen Programm zu verwenden, bekomme ich ** System.ArgumentException: Fehlende obligatorische Parameter für gültige Shared Access-Signatur ** Irgendwelche Ideen dazu? – Pete
'Wenn ich versuche, diese sas in einem anderen Programm zu verwenden '-> Können Sie das genauer beschreiben? Es ist vielleicht keine schlechte Idee, das als neue Frage zu veröffentlichen. –