踊る犬.netブログ (旧)

Electronアプリでパスワードを安全に保存する方法

Electronはデスクトップアプリであり、Cookieは使えない。
しかし認証情報をファイルに保存するわけにはいかない。
適切な保管場所は、macOSならKeychain、LinuxならKeyring、WindowsならCredential Vaultだろう。
これらプラットフォームに合わせた方法で保存できるモジュールを紹介する。

node-keytar

node-keytarは、atom製のキーチェーン管理モジュール。
プラットフォームの違いを意識せずに機密情報を読み書きできる。

import keytar from 'keytar'
keytar.addPassword('service', 'account', 'password')
keytar.getPassword('service', 'account')

上記のように使い方は非常に直感的だ。

トラブルシューティング

自分が使用の際に陥った問題をまとめておく。

Electronのnodeのバージョンに合わせてコンパイルしていない

keytarはC++で書かれているのでインストール時にnode-gypでコンパイルされる。
もしうまく動かなかった場合は、Electronのバージョンに合わせて再コンパイルしてみよう。

cd node_modules/keytar
HOME=~/.electron-gyp node-gyp rebuild --target=1.2.6 --arch=x64 --dist-url=https://atom.io/download/atom-shell

--targetパラメータにElectronのバージョンを指定する。

ちなみに、Electronのバージョンに合わせてネイティブモジュールを再コンパイルしてくれるelectron-rebuildというのもある。

nodeが32bitで動いている

Electronが64bitで動いているなら、keytarもそれに合わせてコンパイルする必要がある。
現在のアーキテクチャが何bitなのか確認するには:

console.log(process.arch)