web-dev-qa-db-fra.com

JWT: Qu'est-ce qu'une bonne clé secrète et comment la stocker dans une application Node.js / Express?

Premièrement, quelle est la bonne méthode pour générer une clé secrète? Je devrais frapper beaucoup de touches aléatoires sur mon clavier pour en générer une, mais il doit y avoir une meilleure solution à cela. Expliquez comment générer une très bonne clé.

Deuxièmement, quelle est la bonne façon de stocker la clé? Je pourrais écrire la clé dans la configuration de mes applications, mais cela signifie qu'un compromis sur le code source compromettra l'ensemble du système. Quel est le bon moyen de stocker la clé secrète dans une application Node.js Express?

39
Sam

Pour générer un secret par programme, vous pouvez utiliser le nœud crypto.randomBytes ()

var crypto = require('crypto');
var jwt = require('jsonwebtoken');

crypto.randomBytes(256, function(ex, buf) {
  if (ex) throw ex;
  var token = jwt.sign({foo: 'bar'}, buf);
  var decoded = jwt.verify(token, buf);
});

En ce qui concerne le stockage, vous avez absolument raison, vous ne devez certainement pas stocker de secrets dans votre contrôle de source. Une meilleure façon serait de charger ces informations sensibles à partir de variables d'environnement, par exemple process.env.MY_SECRET.

Un autre schéma moins courant que j'ai vu consiste à charger des secrets à partir d'un fichier stocké séparément de votre code. Votre application de nœud pourrait rechercher un fichier JSON dans ~/.myapp/secrets.json par exemple.

31
Andrew Lavers