2016-10-02 8 views
0

Ich habe eine Webanwendung (ASP.NET MVC), die Azure Blob Storage zum Speichern von Dokumenten und Bildern verwendet. Jeder Benutzer verfügt über spezifische Zugriffsrechte auf die Blobs, und diese wird in der Webanwendungsdatenbank gespeichert.Azure Blob Speicherberechtigung mit SAS

Derzeit habe ich eine schnelle temporäre Lösung, die die Webanwendung als Mittelschicht verwendet, die die Autorisierung ausführt, und wenn der Client Lesezugriff auf den Blob hat, wird er zuerst von Azure abgerufen und dann an den Client übermittelt. Dies ist natürlich nicht der optimale Weg, dies aus vielen Gründen zu tun.

Ich habe begonnen, wachsen ein System diesen Teil neu zu erstellen mit SAS (Shared Access Signaturen), aber nicht finden kann, eine gute Quelle für die Einrichtung, die skaliert und die Anzahl der Benutzer und Dateien. Ich erwarte, dass die Anzahl der Benutzer um 100 und die Anzahl der Blobs um 100 000 sein wird.

Wie ich es sehe, habe ich zwei Möglichkeiten.

1) Alle Dateien haben eine Signatur, die in der Webanwendungsdatenbank gespeichert ist. Diese Datei wird für alle Benutzer verwendet, die Zugriff auf die Datei haben. Dies wäre der einfache Weg, es zu tun, aber wenn ein Benutzer aus irgendeinem Grund nicht immer noch Zugriff auf die Datei haben, können sie immer noch auf die Datei zugreifen, wenn sie die Verbindung von früheren Zugriff haben.

2) Alle Dateien haben spezifische Signaturen für jeden Benutzer, der Zugriff auf die Datei hat. Dies macht es einfach, den Zugriff auf Dateien zu widerrufen, aber die Anzahl der Signaturen wird massiv sein und wird dies irgendwelche Nebenwirkungen haben?

Gibt es noch weitere Optionen?

Alle Gedanken dazu werden sehr geschätzt!

+1

Gibt es einen Grund, warum Sie nicht daran gedacht haben, SAS so zu erstellen, wie es benötigt wird? –

+0

Ich denke, Sie meinen, dass die SAS erzeugt und der URL in der HTML an den Client geliefert werden würde? Dies ist natürlich eine Option, aber für Bilder werden sie mit Miniaturansichten aufgelistet (ebenfalls in Azure Blob Storage gespeichert). Wenn ich 20 Bilder auf einer Seite habe, würde das bedeuten, dass Azure 20 Roundtrips generiert, um Signaturen zu generieren, bevor der HTML-Code erstellt werden kann gerendert Recht? – moccasine

+0

Sie können meine Antwort hier beziehen: http://stackoverflow.com/questions/39431608/limiting-account-sas-permission-to-specific-files-in-azure-storage/39432023#39432023 –

Antwort

0

Anstatt SAS für jeden Benutzer zu haben, wäre es besser, wenn Sie die Dateien nach Rollen gruppieren und die Benutzer den Rollen zuordnen, was einfach zu skalieren ist, unabhängig von der Anzahl der Benutzer.

Es wird auch nicht empfohlen, Benutzern direkten Zugriff auf Blobs zu gewähren, da Sie Ihren Blob-Inhalt über Ihre Anwendung verteilen möchten. Stellen Sie also den Zugang zur Anwendung mit spezifischen im Kontext der Rolle des Benutzers zur Verfügung.

Siehe unten Artikel für die Generierung von zweiminute SAS, die in zwei Minuten abläuft, so dass Ihre Benutzer mit dem Link nicht für lange Zeit Zugriff auf Bild haben.

http://www.dotnetcurry.com/windows-azure/901/protect-azure-blob-storage-shared-access-signature

Hoffnung, das hilft. :)

+0

Danke für die Antwort. Die Verwendung eines zweiminütigen SAS wäre eine Idee, aber das würde bedeuten, dass für eine Seite, die 20 Miniaturansichten anzeigt, 20 Roundtrips zu Azure bedeuten würden, um Signaturen zu erzeugen. Es wäre gut, wenn ich Dateien gruppieren und eine Signatur für die Gruppe setzen könnte, aber momentan kann das nur auf Container-Ebene gemacht werden, richtig?Und dann müsste ich> 100 Container erstellen, um die Dateien nach Zugriffsgruppen zu gruppieren. Das ist nicht der richtige Weg zu gehen? – moccasine