2016-02-09 16 views
5

güvenli bir şekilde depola Şu anda bir NodeJS komut satırı uygulaması yazıyorum. Uygulama bir API çağrısı yapar ve kullanıcıya bazı veriler döndürür. Bunun bir genel API olduğu göz önüne alındığında, kullanıcı bir API belirteci gerektirir. Bu CLI, kullanıcı makinesinde npm i -g super-cool-api-cli aracılığıyla dünya çapında kurulacaktır.Verileri bir Node CLI uygulamasında

Kullanıcı CLI'yi ilk kez çalıştırdığında, onlar için simge istenir ve sonra onu çalıştırdıktan sonraki her bir sonraki seferde onu yerleştirmek zorunda kalmayacak şekilde depolarım. Kullanıcıya bir yol sağladım. de sıfırla. Ben global olarak yüklenir belirtildiği gibi benim CLI modülünün, fiili dizinde saklayarak ediyorum ve bu şuna benzer: En az gizli dosyayı yapmak için bir nokta kullanarak,

fs.writeFile(__dirname+'/.token.json', JSON.stringify({ "token": token }, null, 2), 'utf8', (e)=>{ 
    // error handling and whatever 
}); 

Ben dosyayı .token.json isim varsayılan olarak.

Neyi soruyorum, bir NodeJS komut satırı uygulamasında hassas bilgileri depolamanın daha iyi/daha güvenli bir yolu varsa, bir kereden fazla çalıştırıyor olmanızdır. environment variables gibi şeyleri kullanmayı düşündüm ama işlemin sonunda sona eriyor gibi görünüyor.

Güvenlikle ilgili kaygılar bir beceri kaynağıdır Biraz eksikliğim var, ama hakkında daha fazla bilgi edinmek için çok fazla istekte bulunun, bu yüzden ipuçlarınız için şimdiden teşekkür edin.

+0

Düğüm CLI uygulamam ile benzer bir şey yapmam gerekiyor. Hiç bir cevabı kabul etmediğini farkettim, ne yaptın? Teşekkürler! –

+0

@JoshPinter Parola arkasında veri depolamak için [buttercup] (https://buttercup.pw/) adında bir modül kullandık. Bu konuda [Küçük tartışmalar vardı] (https://github.com/himynameisdave/git-labelmaker/issues/14) çünkü bu sadece basit görünüyordu. Proje [burada] (https://github.com/himynameisdave/git-labelmaker) ve bol miktarda aktif kullanıcı var, bu yüzden bu çözüm bizim için iyi çalışıyor gibi görünüyor :) –

+0

İlginç ... geri dönüş için teşekkürler ! Buttercup güzel 1Password yerine benziyor. Şifrelerin saklanması için özünü kullanmayı düşünmedim. Şerefe! –

cevap

1

Sen sqlite içinde jetonunuzu depolamak ve sqlite.db dosyası için bir kullanıcı adı/şifre ayarlayabilirsiniz, işte o işletim sistemi tarafından sağlanan kimlik bilgileri depolama tesisleri kullanmak için en iyisi https://github.com/mapbox/node-sqlite3

+0

Bu yüzden hala yerel olarak hassas bir kullanıcı adı/parola dosyasına sahip olmak için kullanıcıya ihtiyacım olacak mı? Üzgünüm normalde bir ön uç adamım bu yüzden bu DB/güvenlik malzemesi kafamın biraz üzerinde ... –

+0

@DaveLunny hayır endişe. Evet, yine de kullanıcı adı ve şifreyi girmek için kullanıcıya ihtiyacınız olacaktır, ancak saklanan jeton dosya sisteminde (güvenlik sorunu olduğunu düşündüğümde) güvenli ve şifreli olacaktır. CLI için, kullanıcı adının/şifresinin oturum başına (bellekte değil, dosya sistemi) önbelleğini kodlayabilirsiniz, böylece kullanıcı sadece oturum başına bir kez kullanıcı adı ve şifre koymalıdır (CLI/terminal penceresinde). Yani, kullanıcı terminali açıp CLI uygulamasını ilk kez çalıştırdığında sadece bir kullanıcı adı ve şifre koymak zorunda kalacaktı. –

+0

Hmm bu oldukça iyi ama ben gerçekten böyle bir oturum için saklanan sevmiyorum. Bu, daha az kullanıcı dostu olacak, ancak açıkça bir JSON dosyası olarak saklanan şifrelenmemiş bir jetonun sorununu çözüyor ve bir kullanıcı adı/parola combo'yu hatırlamak, her seferinde bir bütün jetonu hatırlamaktan/kopyalamaktan/yapıştırmaktan daha iyidir. Bu çözüme daha çok bakacak, teşekkürler! –

4

sqlite için bağlamaları vardır Bu tür bir şey için, elbette her kullanıcının makinede kendi hesabına sahip olduğunu varsayarak. Bildiğim tek NPM paketi, node-keytar.

+0

Aslında oldukça güzel okunaklı, teşekkürler! Öyleyse, uygulamamın parolasını şifre olarak kaydedebildiğim anahtarlık için yeni bir "hizmet" oluşturuyordum? –

+0

Evet, işte bu fikir. –