Couverture de l'article Uploader directement dans GCS sans authentification
Retour aux articles

L'agence

WanadevStudio

Uploader directement dans GCS sans authentification

Google Cloud offre depuis quelques années de plus en plus de services IT et se rapproche du leader de sa catégorie : AWS. Focus sur la solution de stockage cloud qui permet l'upload direct sans authentification utilisateur.

L'utilisation des services Google se font généralement à travers une authentification OAuth2. Deux systèmes sont donc possibles soit par autorisation utilisateur soit par compte de service (serveur à serveur).

@ Dans la plupart des cas ces mécanismes suffisent pour l'utilisation des solutions Google Cloud dans vos projets sauf si vous souhaitez que vos utilisateurs interagissent sans s'authentifier ou passer par l'un de vos serveurs.

Dans le cas d'un upload de fichiers directement dans la solution de storage Google, Vous allez devoir utiliser la solution api XML signed url.

Peu connue, cette solution va permettre de poster des fichiers dans les buckets Google sans authentification directe mais en restreignant l'accès.

Le principe de base consiste à transmettre au moment de l’upload des informations encodées qui vont permettre à Google de connaître le propriétaire, le bucket cible les contraintes d’upload.

Il s'agit de la policy et de la signature.

Upload dans Google Cloud : formez vos bataillons

Pour transmettre convenablement les bonnes informations, voici les principaux à retenir :

Les données seront transmises en POST avec le type multipart/form-data.

Champs recommandés :

  • bucket : nom du bucket GCS
  • key : nom du fichier
  • file : fichier uploadé
  • expires : date d'expiration des données envoyées
  • googleAccessId : compte de service utilisé
  • policy : chaine des contraintes
  • signature : chaine des contraintes encodées

@ La chaîne policy est une chaîne des contraintes de votre formulaire. Elle contient des données obligatoires et d'autres facultatives. La signature est un hashage sha256 avec la clé privée de votre compte de service. Il est donc impératif de réaliser cette opération sur une partie serveur.

^ Pour utiliser votre clé de service vous devez d'abord la convertir au format .pem. ll est donc nécessaire pour créer la signature d'utiliser la clé.

En savoir plus

Une proposition d'implémentation en NodeJS :

Commentaires

Il n'y a actuellement aucun commentaire. Soyez le premier !

  • Couverture de l'article #2 - Module Federation et Vue à l'ère de l'IA : retour de la MadVue 2026
    #2 - Module Federation et Vue à l'ère de l'IA : retour de la MadVue 2026

    Il y a 2 semaines

    Voici la seconde partie de mon retour sur la MadVue 2026, la conférence Vue.js qui s'est tenue à Madrid le 22 mai 2026. Si vous avez manqué le début, la première partie est juste ici :

    Après les fondations de l'application Vue moderne, on change d'échelle et d'époque. Dans cet article, on va voir comment partager des composants entre plusieurs applications Vue avec Module Federation, puis trois talks consacrés à Vue et l'intelligence artificielle : faire générer une interface en direct par un LLM, préparer son projet Vue pour les agents, et enfin apprendre le frontend à l'ère de l'IA.

    C'est parti !

  • Couverture de l'article #1 - Temps réel, URLs typées, formulaires et toolchain : retour de la MadVue 2026
    #1 - Temps réel, URLs typées, formulaires et toolchain : retour de la MadVue 2026

    Il y a 2 semaines

    Le 22 mai 2026, je me suis rendu à Madrid pour la MadVue 2026, la conférence espagnole dédiée à l'écosystème Vue.js. Une journée dense, neuf talks, et une tendance de fond très claire : entre une grosse moitié orientée IA et expérience développeur et une autre consacrée aux fondations qui rendent nos applications soutenables.

    Dans cette série de deux articles, je reviens sur l'ensemble des talks. En les lisant, vous aurez l'impression d'y avoir assisté.

    Cet article est le premier des deux, vous pourrez retrouver chaque partie de cette série ici :

    Dans ce premier article, on pose les fondations d'une application Vue moderne : on verra comment faire du temps réel proprement, comment en finir avec le parsing manuel des paramètres d'URL, un tout nouveau modèle pour construire ses composants de formulaire, l'avènement d'une toolchain JavaScript unifiée (Oxc, Rolldown), et ce qui nous attend avec Nuxt 5.

    Beaucoup de sujets à traiter, alors c'est parti !

  • Couverture de l'article JsonPath en PHP avec Symfony 7.3 : Pour des API Incassables, retour sur le talk d'Alexandre Daubois à l'AFUP DAY Lyon 2026
    JsonPath en PHP avec Symfony 7.3 : Pour des API Incassables, retour sur le talk d'Alexandre Daubois à l'AFUP DAY Lyon 2026

    Il y a 2 semaines

    À l'AFUP Lyon 2026, Alexandre Daubois (CTO chez Les-Tilleuls.coop, membre des core teams Symfony et FrankenPHP, et mainteneur PHP) a présenté un nouveau composant Symfony qu'il a lui-même proposé et mergé : JsonPath. Le titre du talk résume bien l'ambition : en finir avec le code fragile qui navigue dans du JSON à coups de tableaux PHP imbriqués.

  • Couverture de l'article RAJA : industrialiser la personnalisation produit à grande échelle
    RAJA : industrialiser la personnalisation produit à grande échelle

    Il y a 4 mois

    Comment transformer un configurateur 3D en véritable outil industriel ?

    Pour un leader européen comme RAJA, la personnalisation produit ne peut pas reposer sur des traitements manuels ou des approximations techniques. Avec RAJA Print 2.0, l’enjeu était clair : automatiser l’ensemble de la chaîne web-to-print, de la personnalisation en ligne jusqu’au fichier d’impression exploitable par les imprimeurs. Dans cet article, nous revenons sur un projet structurant, à la croisée de la 3D, du traitement d’image et de l’industrialisation digitale.

  • Couverture de l'article Event Bus : Le secret d'une architecture Symfony réellement découplée
    Event Bus : Le secret d'une architecture Symfony réellement découplée

    Il y a 5 mois

    Imaginez : votre utilisateur clique sur "Commander". En coulisses, le domaine Stock doit décrémenter les quantités, le domaine Facturation doit générer une facture, et le domaine Notification doit envoyer un email de confirmation. Trois domaines, une seule action... et un spaghetti de dépendances en perspective. 🍝

    Et si ces domaines pouvaient collaborer sans jamais se connaître ?

    C'est exactement ce que permet l'Event Bus. Mais avant de foncer tête baissée, une question se pose : Symfony propose déjà l'EventDispatcher pour gérer les événements. Alors pourquoi introduire un nouveau concept ?

    Spoiler : ce ne sont pas les mêmes outils, et les confondre peut vous coûter cher.

    Dans cet article, nous allons démystifier leurs différences et découvrir comment l'Event Bus de Symfony Messenger vous permet de construire une architecture réellement découplée.

    Ce que vous allez apprendre :

    • Les différences fondamentales entre EventDispatcher et Event Bus
    • Quand utiliser l'un plutôt que l'autre
    • Comment configurer un Event Bus avec Symfony Messenger
    • Créer une architecture événementielle découplée
  • Couverture de l'article CQRS avec Symfony Messenger : Domptez la complexité de vos applications
    CQRS avec Symfony Messenger : Domptez la complexité de vos applications

    Il y a 5 mois

    Vous êtes-vous déjà retrouvé face à un controller Symfony surchargé qui gère à la fois la validation, la logique métier, la persistence et les réponses HTTP ? Si oui, le CQRS est fait pour vous !

    Le CQRS (Command Query Responsibility Segregation) est un pattern architectural qui sépare clairement les opérations d'écriture (Commands) et de lecture (Queries). Combiné avec Symfony Messenger, il vous permet de :

    • Organiser votre code de manière claire et maintenable
    • Séparer les responsabilités pour respecter les principes SOLID
    • Valider vos données avant même qu'elles n'atteignent votre logique métier
    • Gérer les transactions de base de données de manière élégante
    • Préparer votre application pour l'asynchrone sans effort

    Dans cet article, nous allons explorer les Commands (écriture) et les Queries (lecture) à travers un exemple concret de gestion de bibliothèque.