Soru JWT: İyi bir gizli anahtar nedir ve bir Node.js / Express uygulamasında nasıl saklanır?


İlk olarak, bir gizli anahtar üretmenin iyi bir yöntemi nedir? Bir tane oluşturmak için klavyemde bir çok rasgele tuşa yumruk atmalıyım ama buna daha iyi bir çözüm olmalı. Çok iyi bir anahtar oluşturmanın yolunu açıklayın.

İkincisi, anahtarı saklamak için iyi bir yol nedir? Anahtarları uygulama yapılandırmamda yazabilirim, ancak bu kaynak kodunun bir uzlaşmasının tüm sistemi tehlikeye atacağı anlamına gelir. Bir Node.js Express uygulamasında gizli anahtarı depolamanın iyi yolu nedir?


33
2018-05-06 23:51


Menşei




Cevaplar:


Programatik olarak bir gizli oluşturmak için düğümün 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);
});

Bunu saklamak için kesinlikle haklısınız, kesinlikle kaynak kontrolünüzde sır saklamamalısınız. Ortam değişkenlerinden bu tür hassas bilgileri yüklemek daha iyi bir yol olacaktır. process.env.MY_SECRET.

Gördüğüm daha az bilinen bir başka model de, kodunuzdan ayrı olarak saklanan bir dosyadan sırlar yüklemektir. Düğüm uygulamanızın içindeki bir JSON dosyasını aramasını sağlayabilirsiniz. ~/.myapp/secrets.json Örneğin.


23
2018-05-07 00:54



Bir json dosyası kullanmak için öneriye gitmeye karar verdim. Bu şekilde, uygulamam bu dosyanın içeriğini alabilir ve .gitignore dosyasına yazabilirim, böylece kaynak kontrolüne dahil edilmeyecek. Bir başka harika şey ise, bu dosyaları kaybolmaları durumunda yedek yerlerde saklayabilmem. - Sam
Ayrıca buf.toString('base64') bir dosyada saklanabilen metne dönüştürmek için yöntem. - Sam
Ortam değişkenleri için +1. Env değişkenlerini belirtmenize izin veren PM2 veya IDE'ler gibi işlem yöneticileriyle mükemmel şekilde çalışır. - felixfbecker
Burada belirtilmediğinden ekleme - sürüm kontrolü dışında bir dosya kullanmak gayet iyidir, ancak bu dosyaya erişimi yalnızca kullanıcı / süreç tarafından okunabilecek şekilde kilitlemek için emin olmalısınız. - kvsm
Aynı anda birden fazla düğümüm varsa, farklı anahtarlar alırdım. Bunu nasıl düzeltebilirim? - dfi