パスワード管理

Webサービスを利用するXULアプリでは、たいていの場合、ログインするためのユーザ名やパスワードが付きものだ。入力したユーザ名やパスワードを記憶するために、 nsIPrefService などを利用して pref.js へ保存する?それは簡単だが好ましい方法ではない。
XULにはURIに関連付けてユーザ名やパスワードを管理する仕組みがきちんと提供されているのである。パスワードを保存したり削除したりするには nsIPasswordManager を、保存されたパスワードを問い合わせるには nsIPasswordManagerInternal を利用する。

const PM  = Cc["@mozilla.org/passwordmanager;1"].getService(Ci.nsIPasswordManager);
const PMI = Cc["@mozilla.org/passwordmanager;1"].getService(Ci.nsIPasswordManagerInternal);

例えば、 http://www.example.com に関連付けられたパスワードを問い合わせるには、以下のようにする。

var host = { value : "" }, user = { value : "" }, pass = { value : ""};
try {
  PMI.findPasswordEntry("http://www.example.com", null, null, host, user, pass);
}
catch (ex) {
  // 該当するユーザ名やパスワードが見つからない
}
alert("host:" + host.value + "
user:" + user.value + "
pass:" + pass.value);

http://www.example.com のユーザ名 foo のパスワード bar を保存するには、以下のようにする。どうやら同じユーザ名で別のパスワードを保存しようとしてもうまくいかないようなので、一度 removeUser で削除した後、 addUser で追加するという方法である。

try {
  PM.removeUser("http://www.example.com", "foo");
}
catch (ex) {
  // ユーザ名 foo が存在しない場合、例外発生
}
try {
  PM.addUser("http://www.example.com", "foo", "bar");
}
catch (ex) {
  // 何らかの例外
}

なお、Firefox では保存されたユーザ名やパスワードが ツール > オプション > プライバシー > パスワード > 保存されているパスワードを表示 でパスワードマネージャを開くことができる。

リファレンス:
Interface Reference – nsIPasswordManager
Interface Reference – nsIPasswordManagerInternal

TOP

TOP