Wie kann ich einen einmaligen Download-Link mit Amazon S3 erstellen?

Lesezeit: 3 Minuten

Ich möchte einen einmaligen Download-Link zu einer von Amazon S3 gehosteten Datei erstellen. Dieser Link läuft ab, sobald die Datei heruntergeladen wurde.

Ich möchte, dass diese Datei weiterhin gehostet wird, aber ein Besucher kann die Datei nur einmal herunterladen.

Das Szenario, für das ich das brauche, ist: Ich habe eine Website zum Herunterladen von Dateien, auf der Benutzer für eine Datei bezahlen. Ich möchte, dass der Benutzer die Datei nur einmal von der Website (und Amazon s3) herunterladen kann, ich möchte auch nicht, dass der Benutzer einen direkten Download-Link mit anderen Personen teilen kann.

Wenn dies nicht möglich ist, frage ich mich, ob es effizienter ist, es nach Möglichkeit durch eine IP-Adresse oder ein Cookie einzuschränken?

  • Ich werde Ihnen vorschlagen, Ihre Datei auf einer selbst gehosteten Website zu hosten und den Download mit einer serverseitigen Skriptsprache wie PHP zu handhaben

    Benutzer2533777

    19. Oktober 2013 um 15:35 Uhr

Es gibt keine Möglichkeit, S3 anzuweisen, einen Link nur einmal zu verwenden. Sie können jedoch einen Link erstellen, der nur bis zu einem bestimmten Zeitpunkt verwendet werden kann. Ich leite den Anforderer auf einen S3-Link um, der in wenigen Minuten abläuft, sodass er oder sie keine Zeit hat, ihn zu teilen. Sie können diese Ablaufzeit sehr kurz machen, sogar einige Sekunden, solange ihr Browser Zeit hat, die Umleitungsantwort zu empfangen und ihr zu folgen.

  • Das klingt für meine Situation angemessen. Gibt es Informationen darüber, wie das geht?

    – Muggel

    19. Oktober 2013 um 19:41 Uhr

  • Ich sehe, Sie verwenden PHP. Ich programmiere darin nicht, aber Amazon hat ein SDK dafür, und es sieht so aus, als ob Sie die createPresignedUrl-Methode verwenden sollten. Es ist dokumentiert unter docs.aws.amazon.com/aws-sdk-php-2/latest/…

    – Karl Engelke

    20. Oktober 2013 um 15:36 Uhr

  • Für Ihren Fall ist die getObjectUrl-Methode noch besser als die allgemeinere createPresignedUrl-Methode: docs.aws.amazon.com/aws-sdk-php/latest/…. $s3->getObjectUrl(‘Bucket-Name’, ‘Objektschlüssel’, ‘+5 Minuten’);

    – Jeremy Lindblom

    21. Oktober 2013 um 15:57 Uhr

  • Ich bin mir fast sicher, dass dies für den Start des Downloads gilt, da zu diesem Zeitpunkt die Authentifizierung erfolgt. Aber Sie könnten ganz einfach einen Test erstellen, wenn die Antwort für Sie wichtig ist.

    – Karl Engelke

    10. Mai 2014 um 2:08 Uhr

  • @CharlesEngelke, du hast recht, CloudFront checks the expiration date and time in a signed URL at the time of the HTTP request. If a client begins to download a large object immediately before the expiration time, the download should complete even if the expiration time passes during the download. If the TCP connection drops and the client tries to restart the download after the expiration time passes, the download will fail. Aus docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/… Gleiches sollte für S3 gelten

    – sha256

    30. Januar 2015 um 5:55 Uhr

Benutzer-Avatar
peterc

Sie können einen „einmaligen URL-Generator“-Dienst schreiben (entweder in Form einer Website oder einer Rest-API) und die aws-Funktion für verbundene Benutzer verwenden, um dies zu erreichen.

Betrachten Sie das folgende Verfahren:

  • Wenn der Benutzer eine einmalige URL wünscht, sendet er die Anfrage an Ihren Dienst „Generator für einmalige URLs“.
  • Ihr Dienst generiert eine “einmalige URL” und gibt sie an den Benutzer zurück. Die URL ist eine Eins-zu-Eins-Zuordnung zu der S3-Ressource, die der Benutzer wünscht.
  • Wenn der Benutzer eine Anfrage an die „einmalige URL“ stellt, erstellt der Service einen temporären Benutzer mithilfe der AWS-Verbundbenutzerfunktion und generiert eine vorsignierte S3-URL im Namen des temporären Benutzers.
  • Der Dienst sendet die Antwort an den Benutzer zurück und leitet ihn an die vorsignierte URL weiter.
  • Der Benutzer folgt der Umleitung und beginnt mit dem Herunterladen der Datei.
  • Der Dienst löscht dann den temporären Benutzer. (Oder lässt es verfallen.)

  • Irgendwelche Open-Source-Projekte haben diese Funktionalität?

    – Stefan Heyenrath

    6. September 2015 um 9:43 Uhr

  • @AviParshan gibt es ähnliche Java-Bibliotheken?

    – sinujohn

    13. September 2016 um 19:31 Uhr

  • @sinu Ich kenne keine

    – AP

    14. September 2016 um 19:12 Uhr

1158910cookie-checkWie kann ich einen einmaligen Download-Link mit Amazon S3 erstellen?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy