03
Bloc 3 — Piloter la mise en production et l'évolution des solutions
RNCP 38822 · Expert en Architecture et Développement Logiciel · Niveau 7
Compétences visées
Ce bloc évalue la capacité à déployer une solution logicielle en production dans des conditions réelles : configuration HTTPS/SSL, sécurisation conforme OWASP, mise en place de mécanismes de surveillance, gestion de la dette technique et pilotage de l'évolution d'un système existant.
La maintenance corrective et évolutive, le DevOps (CI/CD, pipelines), l'audit de sécurité inter-équipes et la conformité aux standards de cybersécurité sont au cœur de l'évaluation.
Ce que ce projet évalue
Le projet NexPay couvre l'ensemble du spectre BC03 : la refonte d'un SI legacy sans tests ni sécurité vers une architecture moderne (Symfony 6 + Vue.js 3 + Node.js), la mise en production sécurisée (HTTPS, OWASP Top 10, rate limiting, headers), et un audit inter-équipes simulant un vrai pentest.
Le contexte Fintech — avec des investisseurs, une levée de fonds et des partenaires techniques en attente — justifie et renforce toutes les exigences de production et de sécurité.
Présentation de NexPay SAS
NexPay a été fondée en 2018 à Lyon par deux anciens cadres de Crédit Agricole souhaitant simplifier la gestion des paiements pour les TPE et PME françaises. En 2024, NexPay lève 2,8 M€ en Série A. Le nouveau CTO, Mehdi Aouad, vous mandate en tant que prestataires pour livrer un prototype fonctionnel, sécurisé et documenté avant le premier board post-levée. L'ancienne application est un fichier PHP spaghetti de 40 000 lignes — sans framework, sans tests, avec des requêtes SQL directement dans les vues. La dette technique est totale.
Failles identifiées sur l'ancienne plateforme
Contraintes du projet
👥 Équipe
Équipes de 2 à 3 étudiants. Chaque membre doit être capable de défendre l'ensemble du projet lors de la soutenance.
📅 Durée
1 semaine intensive (lundi → vendredi). Livraison le vendredi avant soutenance. Pas de report possible.
🏗️ Architecture
3 composants interdépendants : backend Symfony 6, frontend Vue.js 3, microservice Node.js/Express. Dépôt Git unique structuré.
⚔️ Audit inter-équipes
Le jeudi : chaque équipe tente de pénétrer l'application d'une autre équipe. Le rapport d'audit est un livrable évalué.
🛡️ Sécurité obligatoire
HTTPS + certificat SSL/TLS, OWASP Top 10 traité et documenté, JWT avec rôles, bcrypt, rate limiting, headers de sécurité.
Partenaires & Intégrations Techniques
NexPay a signé des lettres d'intention avec trois partenaires stratégiques qui attendent une API publique fiable, versionnée et documentée. Votre architecture doit répondre à leurs besoins techniques spécifiques.
| Partenaire | Type | Besoin technique | Impact BC03 |
|---|---|---|---|
| Pennylane | Logiciel comptable | Recevoir les transactions en temps réel via webhook | Microservice Node.js · Webhook sortant · Fiabilité en production |
| Qonto | Néobanque | Synchroniser soldes et virements via API REST | API versionnée · SLA · Documentation Swagger |
| Réseau franchises | 80 points de vente | Dashboard consolidé multi-comptes | Gestion des rôles · Accès multi-comptes · Performance |
Personas Utilisateurs
| Persona | Rôle | Besoins principaux |
|---|---|---|
| 🧁 Sophie | Gérante de boulangerie · Cliente finale | Voir ses transactions, exporter en PDF, recevoir des alertes de solde. Pas technique — l'UX est primordiale. |
| 📊 Karim | DAF d'une franchise · Client B2B | API fiable, données consolidées sur 80 points de vente, accès multi-comptes avec contrôle des droits. |
| 👩💻 Amina | Développeuse Pennylane · Partenaire technique | Documentation claire (Swagger), webhooks stables et idempotents, tokens d'API sécurisés et révocables. |
| 🏗️ Mehdi | CTO NexPay · Commanditaire | Architecture maintenable, conformité sécurité, time-to-market rapide. Il lira votre rapport ligne par ligne. |
Tâches de Développement & Consignes Précises
-
1Repartez de zéro avec Symfony 6 en appliquant une architecture propre. Séparation stricte obligatoire : Controllers (routing uniquement), Services (logique métier), Repositories (accès données), Entités Doctrine (User, Account, Transaction). Justifiez chaque choix d'architecture dans le rapport technique.
-
2Concevez une API REST robuste : codes HTTP corrects pour chaque cas (200, 201, 400, 401, 403, 404, 422), gestion d'erreurs structurée en JSON, pagination sur les listes, sérialisation propre avec le composant Serializer de Symfony. L'API doit être utilisable par Qonto dès le premier jour.
-
3Documentez l'API avec Swagger / NelmioApiDoc. La documentation doit être accessible sur
/api/doc, décrire tous les endpoints, inclure les schémas de requête/réponse et les codes d'erreur. C'est la documentation qu'Amina (Pennylane) utilisera pour intégrer votre API. -
4Implémentez l'authentification JWT avec LexikJWTAuthenticationBundle et la gestion des rôles (Admin, Client, Partenaire). Les endpoints sont protégés selon le rôle — une API sans authentification bloque le bon de commande de Mehdi.
La justification de la refonte depuis le legacy (40 000 lignes PHP sans framework) est un exercice de gestion de la dette technique — compétence centrale du BC03. Votre rapport doit expliquer pourquoi une refonte complète a été choisie plutôt qu'une modernisation progressive, avec les risques associés.
-
1Développez un SPA Vue.js 3 moderne qui consomme l'API Symfony via Axios. Couvrez au minimum 3 écrans : Dashboard (transactions en temps réel), Liste des transactions, Profil utilisateur. La gestion des erreurs côté client est obligatoire (états de chargement, messages d'erreur, feedback visuel).
-
2Implémentez l'affichage en temps réel des transactions via polling ou WebSocket Node.js. Sophie (boulangerie) ne doit pas avoir à rafraîchir manuellement pour voir ses nouvelles transactions.
-
3Développez le microservice Node.js/Express : webhook sortant simulant une notification Pennylane à chaque nouvelle transaction. Le webhook doit être idempotent (Amina l'a exigé), gérer les retentatives en cas d'échec, et logger chaque appel.
-
4Intégrez une API tierce fonctionnelle (Stripe sandbox pour les paiements, OpenExchangeRates pour les taux de change, ou équivalent). L'intégration doit être documentée et gérer les erreurs de l'API externe (timeout, quota dépassé).
Le microservice Node.js représente une extension évolutive de l'architecture — ajout d'un nouveau composant sans modifier le cœur Symfony. Expliquez dans votre rapport comment ce choix architectural facilite les futures intégrations avec de nouveaux partenaires (Qonto, marketplaces).
-
1Configurez HTTPS avec un certificat SSL/TLS valide (Let's Encrypt ou certificat auto-signé documenté). Toutes les communications entre client, API et microservice doivent être chiffrées. Documentez la configuration dans le rapport.
-
2Traitez et documentez l'OWASP Top 10 pour chacune des failles identifiées sur l'ancienne plateforme : XSS (Content-Security-Policy), CSRF (protection Symfony), SQL Injection (Doctrine paramétré), IDOR (vérification d'ownership), Broken Auth (JWT + expiration). Pour chaque faille : état avant, mesure appliquée, preuve (code ou config).
-
3Configurez les headers de sécurité côté Symfony (CORS strict, CSP) et côté Node.js (Helmet.js). Mettez en place un rate limiting sur les endpoints sensibles (login, register, transactions) avec retour 429 explicite et headers Retry-After.
-
4Participez à l'audit inter-équipes du jeudi : tentez de pénétrer l'application d'une autre équipe (injection, brute-force, IDOR, token replay…). Produisez un rapport d'audit formalisé décrivant les vecteurs testés, les vulnérabilités trouvées (ou non) et les recommandations correctives.
-
5Hashage des mots de passe avec bcrypt (facteur de coût ≥ 12). Aucun token, mot de passe ou clé API ne doit apparaître en clair dans la base de données, les logs ou le code source. Un scan automatique du repo (truffleHog ou équivalent) sera réalisé lors de la soutenance.
Les investisseurs ont posé une condition formelle : conformité OWASP avant tout déploiement en production. Une application livrée sans authentification JWT, sans HTTPS ou avec des mots de passe MD5 sera considérée comme non conforme au BC03 et la note sera plafonnée.
Planning de la Semaine
| Lundi — Cadrage & Architecture |
|---|
|
Matin : Brief projet, formation des équipes, choix des fonctionnalités Après-midi : Modélisation BDD (entités, relations), design des endpoints API, wireframes Vue.js 📌 Livrable du jour : Diagramme BDD validé + liste des endpoints API + justification architecture dans le README |
| Mardi — Backend Symfony |
|
Création des entités Doctrine (User, Account, Transaction) + migrations · Endpoints REST + sérialisation JSON + codes HTTP Authentification JWT (LexikJWTAuthenticationBundle) · Gestion des rôles et permissions · Documentation Swagger Compétences BC03 couvertes : Architecture logicielle · API publique · Gestion de la dette technique |
| Mercredi — Vue.js + Node.js |
|
SPA Vue.js 3 (Dashboard, Transactions, Profil) · Consommation API via Axios + gestion tokens JWT Microservice Node.js/Express — webhook sortant Pennylane · Intégration API tierce Compétences BC03 couvertes : Intégrations partenaires · Pilotage de l'évolution · Architecture microservices |
| Jeudi — Sécurité & Audit Inter-équipes ⚔️ |
|
Configuration HTTPS + certificat SSL/TLS · Protection OWASP Top 10 (XSS, CSRF, SQL Injection, IDOR…) Rate limiting + headers de sécurité (CORS, CSP, Helmet.js) · Validation des entrées + bcrypt ⚔️ Audit inter-équipes : chaque équipe tente de pénétrer l'application d'une autre · Rapport d'audit formalisé Compétences BC03 couvertes : Mise en production · Sécurisation · Conformité OWASP · Audit |
| Vendredi — Finalisation & Soutenances |
|
Matin : Finalisation du code, rédaction du rapport technique, préparation des slides Après-midi : Soutenances — 15 min de démo live + 10 min de questions jury Remise : Archive ZIP ou lien GitHub + rapport PDF dans docs/
|
Barème de Notation — 25 Points
| Axe d'évaluation | Critères détaillés | Points |
|---|---|---|
| Backend Symfony & API REST | Architecture propre (MVC, services, repositories) — 2 pts · Endpoints fonctionnels, codes HTTP corrects, sérialisation JSON — 2 pts · Documentation Swagger complète — 1 pt | 5 pts |
| Vue.js + Node.js | SPA Vue.js fonctionnelle avec 3 écrans minimum — 2 pts · Affichage en temps réel (polling ou WebSocket) — 1 pt · Microservice Node.js / webhook opérationnel — 1 pt | 4 pts |
| Web Services & Intégrations | Intégration API tierce fonctionnelle — 1,5 pt · Gestion des codes HTTP, pagination et formats JSON — 1,5 pt | 3 pts |
| Sécurité Web & Mise en production | Authentification JWT + gestion des rôles — 2 pts · OWASP Top 10 traité et documenté — 2 pts · Headers de sécurité + rate limiting — 1 pt | 5 pts |
| Rapport Technique | Clarté et profondeur technique — 2 pts · Justification des choix d'architecture — 2 pts · Analyse des failles identifiées et corrigées — 1 pt | 5 pts |
| Présentation Orale & Démo | Qualité de la démo live et clarté des slides — 1,5 pt · Réponses aux questions du jury — 1,5 pt | 3 pts |
- Export PDF des relevés de compte
- Authentification OAuth2 pour les partenaires externes
- Déploiement sur VPS avec Nginx + certificat Let's Encrypt
- Tests unitaires PHPUnit (couverture > 60%)
- CI/CD avec GitHub Actions
- Rapport d'audit de sécurité inter-équipe formalisé (bonus spécifique BC03)
- Lien GitHub ou archive ZIP (
NomPrenom1_NomPrenom2_NexPay.zip) - README.md avec instructions d'installation complètes
- Rapport PDF (5–8 pages) dans le dossier
docs/ - Soutenance : 15 min démo live + 10 min questions jury
- Architecture et justification des choix techniques
- Description des endpoints + formats JSON
- Analyse des failles OWASP identifiées et mesures correctives
- Rapport d'audit inter-équipe (vecteurs testés + résultats)
- Difficultés rencontrées et solutions — améliorations futures