0

Ich arbeite an einer Webanwendung als Schnittstelle zu Google Cloud Storage (GCS).Zugriff auf Google Cloud Storage über Webanwendung, immer 403

Ich verwende einen Back-End-Dienst, um die Liste der Dateien, die ich auf GCS gespeichert habe, und ihre URL mit der JSON-API abzurufen und diese an meine Webanwendung zurückzugeben. Allerdings war ich nicht wirklich in der Lage, die Dateien über diese URL zu laden, die immer mit 403 verboten zurückkam.

Ich bin mir nicht sicher, wie die GCS-Authentifizierung hinter der Szene funktioniert und ob es möglich ist, den Zugriff auf die Webanwendung direkt zu gewähren. Ich bin nicht sicher, wie ich Anwendungsauthentifizierungsinformationen über HTTP-Anfrage anhängen könnte. Was ich weiß ist, dass ich das über den Backend-Dienst tun kann, aber aus Gründen der Einfachheit frage ich mich, ob es möglich ist, damit umzugehen. Eines der Dinge, die ich ausprobiert habe, ist das Hinzufügen der Webanwendungsdomäne (die über den Referrer in der HTTP-Anforderung gesendet wird) in ACL zu diesem Bucket, der überhaupt nicht funktioniert.

Und danke, was @Brandon unten hingewiesen hat. Es ist in Ordnung, jedem, der Zugriff auf die Anwendung hat, den Inhalt des GCS anzuzeigen, da es sich um eine interne App handelt, und ich habe ihre Authentifizierung bereits beim ersten Dienst der Webanwendung überprüft. mit gcloud (Ihre python document ist wirklich gut)

====

Lösung

Ich landete die signedUrl verwenden, die in 5 Minuten ablaufen und ich empfehle mit GCS interagieren. Danke nochmal für die gründliche Antwort!

+0

Wessen Berechtigungen möchten Sie verwenden?Ihre eigenen Berechtigungen oder die Berechtigungen der einzelnen Nutzer Ihrer Anwendung (mit eigenen Google-Konten)? –

+0

Vielen Dank @Brandon. Ich möchte die Anwendungserlaubnis der Einfachheit halber verwenden, da es eine interne App ist. Außerdem weiß ich, dass es möglich ist, dass ich einen Backend-Dienst habe (wenn sie auch auf GAE gehostet werden), um Zugang mit dem Appid zu erbitten. Aber ich möchte mich wirklich nur auf das Frontend verlassen. – yeelan

Antwort

1

Sie haben einen Benutzer in einem Webbrowser, der ein Objekt herunterladen möchte, für das nur das Dienstkonto Ihrer Anwendung Lesezugriff hat. Sie haben ein paar Optionen:

  1. Erweitern Sie den Zugriff: Machen Sie diese Objekte öffentlich lesbar. Wahrscheinlich nicht die beste Wahl, wenn diese Information empfindlich ist, aber wenn es nicht ist, ist dies die einfachste Lösung.
  2. Geben Sie die Anmeldeinformationen Ihrer App an den Benutzer weiter, damit sie sich als Ihre App authentifizieren können. Dies ist eine wirklich schlechte Idee, und ich sollte es wahrscheinlich nicht einmal hier aufführen.
  3. Wenn ein Benutzer eine Datei herunterladen möchte, lassen Sie sie Ihre App danach fragen und lassen Sie dann Ihre App die Datei abrufen und den Inhalt an den Benutzer streamen. Dies ist die einfachste Lösung für den clientseitigen Code, aber Ihre App ist für das Streaming von Dateiinhalten verantwortlich, was nicht besonders gut ist.
  4. Wenn ein Benutzer eine Datei herunterladen möchte, bitten Sie Ihre App um Erlaubnis und antworten Sie ihnen mit einer Art Token, mit dem sie die Daten direkt von GCS abrufen können.

# 4 ist, was Sie wollen. Ihre Nutzer werden Ihre App nach einer Datei fragen, Ihre App wird entscheiden, ob sie auf diese Datei über alles, was Sie tun, zugreifen darf (Passwörter? IP-Checks? Cookies? Was auch immer.) Dann antwortet Ihre App mit einer URL dem Nutzer kann verwenden, um die Datei direkt von GCS zu holen.

Diese URL wird als "signierte URL" bezeichnet. Ihre App verwendet einen eigenen privaten Schlüssel, um einer URL eine Signatur hinzuzufügen, die angibt, welches Objekt vom Inhaber heruntergeladen werden darf und für lange Zeit ist die URL gültig. Die procedure for signing URLs ist etwas schwierig, aber glücklicherweise die gcloud-Speicherbibliotheken have helper functions, die sie erzeugen können.

+0

Vielen Dank Brandon für Ihren gründlichen Lösungsvergleich. Ich erinnere mich an eine unserer anderen Anwendung verwendet genau Lösung # 4, aber die API war nicht so freundlich zu der Zeit. Hoffentlich wird die Migration zu gcloud die Dinge jetzt einfacher machen. – yeelan

Verwandte Themen