Passer au contenu
Aucun résultat
  • Mes GPTs
    • Générateur tableau HTML pour vos gpts
  • A télécharger
  • Réalisations
  • Projets
    • NoNetChat
    • LoveStarter
    • Whisper Web
    • Rustdesk Web Client
  • Parrainage
  • Jeux
    • Dés 3D
    • Pile ou Face
  • Ansible
    • Ansible – formater clef SSH pour playbook yaml
    • Ansible Vault – Chiffrement et Déchiffrement
  • Code
    • Monaco Diff Viewer – Comparateur de texte/code
    • Code – Suppression des commentaires
    • Base64 – Encodage et Décodage
    • Code HTML/JS/CSS – Mise en forme
    • Conversion de texte (majuscule, minuscule, camelCase, …)
    • Convertisseur Markdown en HTML
    • Générateur Hash SRI
    • Minification et Unminification
    • URL – Encodage et Décodage
  • Outils
    • Carte Interactive des Rapports de la Cour des Comptes – Explorez la Gestion Publique en France et Outre-Mer avec des GPTs Spécifiques
    • Nmap Viewer
    • Calculatrice scientifique
    • Crontab – Parser
    • Education Nationale – Traitement des politiques d’habilitation
    • Générateur de mot de passe
    • MiFare – UID Converter
    • VNC – Déchiffrement
    • Debian – Générateur sources.list
    • Ubuntu – Générateur Sources.list
    • Polynésie Française – Calculez votre salaire brut/net
  • Nouvelle-Calédonie
    • Nouvelle-Calédonie – Le droit calédonien et ses racines culturelles
    • Nouvelle-Calédonie – Calculez votre salaire brut/net
    • Nouvelle-Calédonie – Ouvrir un compte bancaire
    • Dépôt de garantie en Nouvelle-Calédonie : guide pratique + mon expérience avec Maximmo
    • Status Gouv NC – Suivi des sites Web publics
  • Jacob Brown Acro
PASCAL MIETLICKI

INGÉNIEUR INSA – MASTER IAE/TSM – ADMINISTRATEUR SYSTÈMES ET RÉSEAUX – DÉVELOPPEUR PHP/LARAVEL/IONIC/FLUTTER – ADMINISTRATEUR BUSINESS OBJECTS – ADMINISTRATEUR RANCHER/KUBERNETES – DEVOPS

  • Mes GPTs
    • Générateur tableau HTML pour vos gpts
  • A télécharger
  • Réalisations
  • Projets
    • NoNetChat
    • LoveStarter
    • Whisper Web
    • Rustdesk Web Client
  • Parrainage
  • Jeux
    • Dés 3D
    • Pile ou Face
  • Ansible
    • Ansible – formater clef SSH pour playbook yaml
    • Ansible Vault – Chiffrement et Déchiffrement
  • Code
    • Monaco Diff Viewer – Comparateur de texte/code
    • Code – Suppression des commentaires
    • Base64 – Encodage et Décodage
    • Code HTML/JS/CSS – Mise en forme
    • Conversion de texte (majuscule, minuscule, camelCase, …)
    • Convertisseur Markdown en HTML
    • Générateur Hash SRI
    • Minification et Unminification
    • URL – Encodage et Décodage
  • Outils
    • Carte Interactive des Rapports de la Cour des Comptes – Explorez la Gestion Publique en France et Outre-Mer avec des GPTs Spécifiques
    • Nmap Viewer
    • Calculatrice scientifique
    • Crontab – Parser
    • Education Nationale – Traitement des politiques d’habilitation
    • Générateur de mot de passe
    • MiFare – UID Converter
    • VNC – Déchiffrement
    • Debian – Générateur sources.list
    • Ubuntu – Générateur Sources.list
    • Polynésie Française – Calculez votre salaire brut/net
  • Nouvelle-Calédonie
    • Nouvelle-Calédonie – Le droit calédonien et ses racines culturelles
    • Nouvelle-Calédonie – Calculez votre salaire brut/net
    • Nouvelle-Calédonie – Ouvrir un compte bancaire
    • Dépôt de garantie en Nouvelle-Calédonie : guide pratique + mon expérience avec Maximmo
    • Status Gouv NC – Suivi des sites Web publics
  • Jacob Brown Acro
PASCAL MIETLICKI

INGÉNIEUR INSA – MASTER IAE/TSM – ADMINISTRATEUR SYSTÈMES ET RÉSEAUX – DÉVELOPPEUR PHP/LARAVEL/IONIC/FLUTTER – ADMINISTRATEUR BUSINESS OBJECTS – ADMINISTRATEUR RANCHER/KUBERNETES – DEVOPS

Déploiement d’une application Electron en mode kiosque avec authentification automatique et chiffrement de la configuration

  • 15 août 2025
  • Développement, Travaux / Expériences

Dans la plupart des établissements, les Tableaux Blancs Interactifs (TBI) sont devenus le cœur des cours numériques : ils affichent des ressources en ligne, des applications pédagogiques ou des outils de collaboration. Pourtant, dès qu’il s’agit de maintenir une session authentifiée — sans imposer aux étudiants de saisir un mot de passe à chaque cours et sans risquer la fuite de ces identifiants dans les DevTools ou le gestionnaire du navigateur — le défi devient concret :

  • Comment démarrer automatiquement une application Web protégée sur un TBI, sans jamais exposer le mot de passe ?
  • Comment verrouiller l’interface en mode kiosque tout en gardant une porte de sortie (fermeture propre) ?
  • Comment packager cette solution en un exécutable autonome, facile à déployer et à maintenir ?
  • Comment protéger votre code JavaScript embarqué (app.asar) pour éviter que quelqu’un n’en extraie les credentials en clair ?

Ce guide pas à pas vous montre une architecture robuste basé sur le projet electron de github pour répondre à ces besoins :

  1. Authentification automatique via un preload sécurisé,
  2. Mode kiosque adaptable entre développement et production,
  3. Chiffrement de votre configuration (login/mot de passe) en AES-256,
  4. Packaging et signature de l’application pour un déploiement clé en main.

Table of Contents

    • 📋 Prérequis
  • Création du projet Electron
  • Fichiers de configuration pour le dev
  • Contenu de main.js
  • Contenu de preload.js
  • Configuration de package.json
  • Signature et safeStorage (optionnel)
  • VII. Commandes résumé rapide
    • J’aime ça :
    • Articles similaires

📋 Prérequis

  1. Environnement de développement
    • Node.js v16+ et npm
    • Git (optionnel)
  2. Outils
    • Visual Studio Code (ou votre IDE préféré)
    • Powershell (Windows) ou Terminal (Unix)
    • Scoop / Chocolatey / Homebrew pour installer les Build Tools (Windows/macOS)
  3. Certificat de signature (optionnel mais recommandé pour safeStorage)
  4. Connaissances de base en JavaScript et ligne de commande

Création du projet Electron

  1. Initialiser le dossier
    mkdir secure-electron-login && cd secure-electron-login
    npm init -y
  2. Installer Electron et le builder
    npm install electron --save-dev
    npm install electron-builder cross-env --save-dev
  3. Structure initiale
    secure-electron-login/
    ├── main.js
    ├── preload.js
    ├── package.json
    └── config.json

Fichiers de configuration pour le dev

Créer config.json à la racine :

{
« login »: « [email protected] »,
« password »: « MotDePasseUltraSecret »
}

Créer encrypt-config.js pour générer le .enc :

// encrypt-config.js
const fs     = require('fs');
const path   = require('path');
const crypto = require('crypto');

// ⚠️ même clé que STATIC_ENCRYPTION_KEY dans main.js
const KEY = Buffer.from(
  '4f62b5c8d9e0a1b2c3d4e5f60718293a4b5c6d7e8f9012a3b4c5d6e7f8091a2b',
  'hex'
);
const inPath  = path.join(__dirname, 'config.json');
const outPath = path.join(__dirname, 'config.enc');
// lit le JSON en clair
const data    = fs.readFileSync(inPath);
// génère un IV aléatoire (16 octets)
const iv      = crypto.randomBytes(16);
// chiffre avec AES-256-CBC
const cipher  = crypto.createCipheriv('aes-256-cbc', KEY, iv);
const encrypted = Buffer.concat([iv, cipher.update(data), cipher.final()]);
// écrit le buffer [iv|payload]
fs.writeFileSync(outPath, encrypted);
console.log('✅ config.enc généré');

Contenu de main.js

Import et clés

// main.js
const { app, BrowserWindow, ipcMain, Menu } = require('electron');
const path = require('path');
const fs = require('fs');
const crypto = require('crypto');

// Clé AES-256 (32 octets hex)
const STATIC_KEY = Buffer.from(
'4f62b5c8d9e0a1b2c3d4e5f60718293a4b5c6d7e8f9012a3b4c5d6e7f8091a2b', 'hex'
);

Fonction de chargement des credentials

const isDev = process.env.NODE_ENV === 'development';

function loadCredentials() {
if (isDev) {
// DEV : on lit config.json à la racine
const jsonPath = path.join(__dirname, 'config.json');
if (!fs.existsSync(jsonPath)) throw new Error('config.json introuvable en dev');
return JSON.parse(fs.readFileSync(jsonPath, 'utf8'));
}
// PROD : on lit config.enc dans le dossier des ressources
const encPath = path.join(process.resourcesPath, 'config.enc');
if (!fs.existsSync(encPath)) throw new Error('config.enc introuvable en prod');
const buf = fs.readFileSync(encPath);
const iv = buf.slice(0, 16), data = buf.slice(16);
const decipher = crypto.createDecipheriv('aes-256-cbc', STATIC_KEY, iv);
const decrypted = Buffer.concat([decipher.update(data), decipher.final()]);
return JSON.parse(decrypted.toString());
}

Création de la fenêtre et injection

let credentials;

function createWindow() {
  const win = new BrowserWindow({
    width: 1280, height: 800,
    kiosk: false,
    fullscreen: !isDev,
    webPreferences: {
      preload: path.join(__dirname, 'preload.js'),
      contextIsolation: true,
      nodeIntegration: false
    }
  });

  win.loadURL('https://monapp.ex');
  win.webContents.on('did-finish-load', () => {
    win.webContents.send('credentials', credentials);
  });

  if (isDev) {
    win.webContents.openDevTools({ mode: 'detach' });
    Menu.setApplicationMenu(Menu.buildFromTemplate([
      { label: 'Dev', submenu: [{ role: 'reload' }, { role: 'toggleDevTools' }] }
    ]));
  } else {
    Menu.setApplicationMenu(Menu.buildFromTemplate([
      { label: 'Fichier', submenu: [{ role: 'quit', label: 'Quitter' }] }
    ]));
  }

  win.webContents.on('before-input-event', (e, input) => {
    if (isDev && input.control && input.shift && input.key.toLowerCase() === 'i') {
      win.webContents.toggleDevTools();
      e.preventDefault();
    }
  });
}

app.whenReady()
   .then(() => { credentials = loadCredentials(); })
   .then(createWindow)
   .catch(err => {
     console.error('Erreur à l’initialisation :', err);
     app.quit();
   });

Contenu de preload.js

// preload.js
const { contextBridge, ipcRenderer } = require('electron');

window.addEventListener('DOMContentLoaded', () => {
  const style = document.createElement('style');
  style.textContent = `
    /* Cache et désactive l'icône œil et tout élément lié */
    #show_password,
    .show-password,
    .password-indicator {
      display: none !important;
      pointer-events: none !important;
    }
  `;
  document.head.appendChild(style);
});

contextBridge.exposeInMainWorld('secureLogin', {
  // facultatif si tu veux déclencher manuellement
  fillLoginForm: () => ipcRenderer.send('fill-login')
});

ipcRenderer.on('credentials', (_, { login, password }) => {
  const tryInject = () => {
    const loginInput    = document.querySelector('#user_email');
    const passwordInput = document.querySelector('#password_field');
    const form          = passwordInput?.closest('form');

    if (loginInput && passwordInput && form) {
      loginInput.value    = login;
      passwordInput.value = password;
      form.submit();
    } else {
      // réessaie toutes les 200 ms si les éléments ne sont pas encore présents
      setTimeout(tryInject, 200);
    }
  };

  tryInject();
});

Configuration de package.json

{
  "name": "secure-electron-login",
  "version": "1.0.0",
  "description": "Application kiosque Electron pour Visible Body avec login automatique sécurisé",
  "author": "Pascal Mietlicki",
  "main": "main.js",
  "scripts": {
    "dev": "cross-env NODE_ENV=development electron .",
    "encrypt-config": "node encrypt-config.js",
    "dist": "npm run encrypt-config && electron-builder",
    "start": "npm run dist && start \"\" \"dist\\win-unpacked\\VisibleBodySecureLogin.exe\""
  },
  "devDependencies": {
    "cross-env": "^7.0.3",
    "electron": "^29.0.0",
    "electron-builder": "^26.0.12"
  },
  "build": {
    "extraResources": [
    { "from": "config.enc", "to": "config.enc" }
  ],
    "appId": "com.visiblebody.securelogin",
    "productName": "VisibleBodySecureLogin",
    "files": [
      "main.js",
      "preload.js",
      "package.json"
    ],
    "directories": {
      "output": "dist"
    },
    "win": {
      "target": [
        "nsis",
        "portable",
        "zip"
      ],
      "icon": "assets/icon.ico"
    },
    "mac": {
      "target": "dmg",
      "icon": "assets/icon.icns"
    },
    "linux": {
      "target": "AppImage",
      "icon": "assets"
    }
  }
}

Signature et safeStorage (optionnel)

Windows (.pfx) :

"build": {
  "win": {
    "certificateFile": "moncert.pfx",
    "certificatePassword": "monMotDePasseCertif"
  }
}

macOS (Developer ID) :

"build": {
  "mac": {
    "identity": "Developer ID Application: MonOrg (TEAMID)"
  }
}

Activation de safeStorage :

const { safeStorage } = require('electron');
if (app.isPackaged && safeStorage.isEncryptionAvailable()) {
  // safeStorage.encryptString / decryptString utilisables
}

VII. Commandes résumé rapide

  • Chiffrement de la configuration (config.json → config.enc)
    npm run encrypt-config
  • Dév :
    npm install
    npm run dev
  • Build/Prod :
    npm install
    npm run start
    (Génère config.enc, compile, signe, lance l’exécutable.)

npm run start exécute en chaîne encrypt-config, dist et lance l’EXE généré.

Pour macOS/Linux, adaptez la commande start du script package.json afin d’ouvrir directement votre binaire.


Partager :

  • Partager sur X(ouvre dans une nouvelle fenêtre) X
  • Partager sur Facebook(ouvre dans une nouvelle fenêtre) Facebook
  • Imprimer(ouvre dans une nouvelle fenêtre) Imprimer
  • Envoyer un lien par e-mail à un ami(ouvre dans une nouvelle fenêtre) E-mail
  • Partager sur LinkedIn(ouvre dans une nouvelle fenêtre) LinkedIn
  • Partager sur Reddit(ouvre dans une nouvelle fenêtre) Reddit
  • Partager sur Tumblr(ouvre dans une nouvelle fenêtre) Tumblr
  • Partager sur Pinterest(ouvre dans une nouvelle fenêtre) Pinterest
  • Partager sur Telegram(ouvre dans une nouvelle fenêtre) Telegram
  • Partager sur WhatsApp(ouvre dans une nouvelle fenêtre) WhatsApp
  • Partager sur Mastodon(ouvre dans une nouvelle fenêtre) Mastodon
  • Partager sur Nextdoor(ouvre dans une nouvelle fenêtre) Nextdoor

J’aime ça :

J’aime chargement…

Articles similaires

Étiquettes
# AES-256-CBC# authentification automatique# auto-login# borne interactive# chiffrement ASAR# code signing# config.enc# cross-env# DevTools# Electron# electron-builder# javascript# Linux# macOS# mode kiosque# node.js# packaging Electron# preload.js# safeStorage# sécurité# TBI# Windows
Déploiement d’une application Electron en mode kiosque avec authentification automatique et chiffrement de la configuration
Article précédent Héberger RustDesk dans Kubernetes avec client Web
Article suivant ⚡Boostez votre productivité avec bolt.new : créez et déployez des apps en un clic grâce à l’IA
Déploiement d’une application Electron en mode kiosque avec authentification automatique et chiffrement de la configuration
Confidentialité et cookies : ce site utilise des cookies. En continuant à utiliser ce site Web, vous acceptez leur utilisation.

Pour en savoir plus, notamment sur la façon de contrôler les cookies, consultez : Politique relative aux cookies

Service Avantages Type Lien
{{ link.name }} {{ link.benefits }} {{ link.type }} Accéder

Ponctuel
Mensuellement

Faire un don ponctuel

Faire un don mensuel

Choisir un montant

€2,00
€5,00
€10,00
€2,00
€5,00
€10,00

Ou saisir un montant personnalisé

€

Un grand merci pour votre don ! Vous venez de sponsoriser ma prochaine insomnie créative !

Merci pour votre don mensuel ! Vous venez de me propulser du statut de blogueur solitaire à celui de créateur soutenu par une légende : vous !

Faire un donFaire un don mensuel

ARTICLES EN VOGUE

  • 🎲 Jeux de Société Sans Cartes ni Plateau : Amusez-vous N'importe Où, N'importe Quand !
    🎲 Jeux de Société Sans Cartes ni Plateau : Amusez-vous N'importe Où, N'importe Quand !
  • MAS: La Solution Ultime pour l'Activation de Windows et Office par massgrave.dev
    MAS: La Solution Ultime pour l'Activation de Windows et Office par massgrave.dev
  • Polynésie Française - Calculez votre salaire brut/net
    Polynésie Française - Calculez votre salaire brut/net
  • Comment dupliquer son badge d'immeuble avec un smartphone
    Comment dupliquer son badge d'immeuble avec un smartphone
  • RDP Wrapper - Un Terminal Server (TSE) Gratuit pour Windows
    RDP Wrapper - Un Terminal Server (TSE) Gratuit pour Windows

ARTICLES SIMILAIRES

  • Google Books Downloader : Exporter les livres électroniques Google Books en PDFblack tablet computer behind books
  • Comment mettre en place un miroir Docker Hub avec Nexus Repository : tutoriel complet
  • Porteus Kiosk – un linux verrouillé pour l’accès publiclaptop technology ipad tablet

CATÉGORIES

  • Android
  • Bons plans
  • Business Objects
  • Code
  • Déploiement
  • Développement
  • Développement personnel
  • DevOps
    • Formation DevOps
  • Divers
  • Docker
  • Domotique
  • Droit
  • Education
  • Energie
  • Formations
    • Formation Administration Linux
    • Formation Automatisation Python & Go
    • Formation CI/CD Pipelines
    • Formation Conteneurs & Orchestration
    • Formation Infrastructure as Code
    • Formation Observabilité
    • Formation Réseaux & Virtualisation
    • Formation Sécurité DevSecOps
  • GED
  • Impôts
  • Infrastructure
  • Intelligence Artificielle
  • Java
  • Kubernetes
    • Formation Kubernetes
  • Linux
  • Logiciels libres
  • Mac
  • Manuels
  • Messagerie
  • Nouvelle-Calédonie
  • Organisation
  • Outils
  • Projets
  • Rancher
  • Rapports
  • Retrogaming
  • Sciences sociales
  • Sécurité / Réseau
  • Technologie
  • Travaux / Expériences
  • Tutoriel
  • Vie pratique
  • Windows

STATISTIQUES

  • 252 592 visites
  • LinkedIn
  • Facebook
  • Instagram
  • Twitter
  • Amazon
  • Spotify

Publications similaires

Mettre en place une infrastructure de développement sécurisée avec Docker Hardened Images

Mettre en place une infrastructure de développement sécurisée avec Docker Hardened Images

  • 31 janvier 2026
La sécurité des applications React et Next.js : Une checklist de sécurité

La sécurité des applications React et Next.js : Une checklist de sécurité

  • 30 janvier 2026
Sécuriser vos dépôts npm avec safe-npm

Sécuriser vos dépôts npm avec safe-npm

  • 19 janvier 2026

ARTICLES RÉCENTS

  • Docker versus Nix: La quête de la reproductibilité vraie
  • L’avenir des bases de données avec TiDB et l’intelligence artificielle
  • Ghidra MCP : L’IA au service du reverse engineering
  • Génération de mots de passe sécurisés avec des expressions régulières
  • Le Guide Complet de l’Augmentation de Données pour l’Apprentissage Automatique
  • Polaris : auditer et corriger vos manifests Kubernetes
  • VectorDBZ : Gérez toutes vos bases vectorielles depuis une seule app
  • Formation GitLab CI/CD : du premier pipeline à l’industrialisation

À TÉLÉCHARGER

  • BDD pour la gestion d'un parc de véhicule (1016276 téléchargements )
  • Calcul d'itinéraires grâce à la théorie des graphes (1006166 téléchargements )
  • Le manuel de l'administrateur système sous Linux (981086 téléchargements )
  • Assurer la sécurité des réseaux (973011 téléchargements )
  • Tutoriel sur Thunderbird (965452 téléchargements )
  • Base de connaissances sur Business Objects (914111 téléchargements )
  • Etude de marché : personnes âgées dépendantes (897397 téléchargements )
  • Initiation à l'informatique sous Windows (893940 téléchargements )

active directory administration réseau administration système android apache auto-hébergement automatisation cert-manager CI/CD compatibilité confidentialité configuration devops Docker déploiement formation en ligne Formations gestion des fichiers gestion des utilisateurs HTTPS infrastructure IT installation Intelligence Artificielle interface utilisateur intégration kubernetes ldap Linux open-source Open source outils performance personnalisation protection des données rancher reverse proxy réseau ssl sécurité sécurité informatique sécurité réseau TLS tools Tutoriel Windows

Méta

  • Connexion
  • Flux des publications
  • Flux des commentaires
  • Site de WordPress-FR

Flux RSS

Copyright © 2026 - Pascal MIETLICKI. All rights reserved.

💎 Boostez vos finances avec ces offres exclusives ! 🚀

Profitez des meilleurs avantages avec ces offres de parrainage :

Service Avantages Type Lien
{{ link.name }} {{ link.benefits }} {{ link.type }} Accéder
%d