aboutsummaryrefslogtreecommitdiff
path: root/files/ja/using_nsiloginmanager/index.html
blob: 569a78924d955c7248bfba4e3446633046e5dc2b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
---
title: Using nsILoginManager
slug: Using_nsILoginManager
tags:
  - Firefox 3
  - Interfaces
  - XPCOM
  - XPCOM API Reference
translation_of: Mozilla/Tech/XPCOM/Reference/Interface/nsILoginManager/Using_nsILoginManager
---
<p>{{ Fx_minversion_header(3) }}
{{ 英語版章題("Working with the Login Manager") }}
</p>
<h3 id="Login_Manager_.E3.82.92.E5.88.A9.E7.94.A8.E3.81.99.E3.82.8B" name="Login_Manager_.E3.82.92.E5.88.A9.E7.94.A8.E3.81.99.E3.82.8B"> Login Manager を利用する </h3>
<p>拡張機能はしばしば外部サイトや Web アプリケーション等のパスワードを安全に格納する必要があります。安全に実行するため次の機能を利用できます。<code><a href="ja/NsILoginManager">nsILoginManager</a></code> は機密事項なパスワード情報のための安全なストレージを用意し、<code><a href="ja/NsILoginInfo">nsILoginInfo</a></code> はログイン情報を格納する方法を提供します。
</p><p>{{ 英語版章題("Getting nsILoginManager") }}
</p>
<h3 id="nsILoginManager_.E3.82.92.E5.8F.96.E5.BE.97.E3.81.99.E3.82.8B" name="nsILoginManager_.E3.82.92.E5.8F.96.E5.BE.97.E3.81.99.E3.82.8B"> <code>nsILoginManager</code> を取得する </h3>
<p><code>nsILoginManger</code> を実装するコンポーネントを得るためには以下のコードを利用します。
</p>
<pre>var passwordManager = Components.classes["@mozilla.org/login-manager;1"]
                                .getService(Components.interfaces.nsILoginManager);
</pre>
<p>ログインマネージャの多くの関数は <code><a href="ja/NsILoginInfo">nsILoginInfo</a></code> オブジェクトを引数として利用します。<code><a href="ja/NsILoginInfo">nsILoginInfo</a></code> オブジェクトは次の属性を保有します。ホスト名、フォームのサブミット先 URL、HTTP realm、ユーザ名、ユーザ名フィールド、パスワード、パスワードフィールド。ホスト名、ユーザ名、パスワード属性は必須で、他のフィールドはログインが Web のページフォーム向けであるか、または HTTP/FTP 認証サイトのログインであるかにより設定されます。より詳細には <code><a href="ja/NsILoginInfo">nsILoginInfo</a></code> 属性定義をご覧ください。<code><a href="ja/NsILoginInfo">nsILoginInfo</a></code> オブジェクトを定義するのは簡単です。
</p>
<pre>var nsLoginInfo = new Components.Constructor("@mozilla.org/login-manager/loginInfo;1",
                                             Components.interfaces.nsILoginInfo,
                                             "init");

var loginInfo = new nsLoginInfo(hostname, formSubmitURL, httprealm, username, password,
                                usernameField, passwordField);
</pre>
<p>{{ 英語版章題("Examples") }}
</p>
<h3 id=".E4.BD.BF.E7.94.A8.E4.BE.8B" name=".E4.BD.BF.E7.94.A8.E4.BE.8B">使用例</h3>
<p>{{ 英語版章題("Creating a login for a web page") }}
</p>
<h4 id="Web_.E3.83.9A.E3.83.BC.E3.82.B8.E5.90.91.E3.81.91.E3.83.AD.E3.82.B0.E3.82.A4.E3.83.B3.E3.82.92.E4.BD.9C.E6.88.90.E3.81.99.E3.82.8B" name="Web_.E3.83.9A.E3.83.BC.E3.82.B8.E5.90.91.E3.81.91.E3.83.AD.E3.82.B0.E3.82.A4.E3.83.B3.E3.82.92.E4.BD.9C.E6.88.90.E3.81.99.E3.82.8B"> Web ページ向けログインを作成する</h4>
<pre class="eval"> <span class="nowiki">var formLoginInfo = new nsLoginInfo('http://www.example.com',
                       'http://login.example.com', null,
                       'joe', 'SeCrEt123', 'uname', 'pword');</span>
</pre>
<p>このログインは以下のような HTML フォームに対応します。
</p>
<pre class="eval"> <span class="nowiki">
  &lt;form action="http://login.example.com/foo/authenticate.cgi"&gt;
  Please log in.
  Username: &lt;input type="text"     name="uname"&gt;
  Password: &lt;input type="password" name="pword"&gt;
  &lt;/form&gt;
  </span>
</pre>
<p>{{ 英語版章題("Creating a site authentication login") }}
</p>
<h4 id=".E3.82.B5.E3.82.A4.E3.83.88.E3.81.AE.E5.80.8B.E4.BA.BA.E8.AA.8D.E8.A8.BC.E5.90.91.E3.81.91.E3.83.AD.E3.82.B0.E3.82.A4.E3.83.B3.E3.82.92.E4.BD.9C.E6.88.90.E3.81.99.E3.82.8B" name=".E3.82.B5.E3.82.A4.E3.83.88.E3.81.AE.E5.80.8B.E4.BA.BA.E8.AA.8D.E8.A8.BC.E5.90.91.E3.81.91.E3.83.AD.E3.82.B0.E3.82.A4.E3.83.B3.E3.82.92.E4.BD.9C.E6.88.90.E3.81.99.E3.82.8B">サイトの個人認証向けログインを作成する</h4>
<pre class="eval"> <span class="nowiki">var authLoginInfo = new nsLoginInfo('http://www.example.com',
                       null, 'ExampleCo Login',
                       'alice', 'SeCrEt321', "", "");</span>
</pre>
<p>これはサーバ <span class="nowiki">http://www.example.com</span> が次のようなリプライを送ってきた場合のログインに対応します。
</p>
<pre class="eval"> HTTP/1.0 401 Authorization Required
 Server: Apache/1.3.27
 WWW-Authenticate: Basic realm="ExampleCo Login"
</pre>
<p>{{ 英語版章題("Creating a local extension login") }}
</p>
<h4 id=".E3.83.AD.E3.83.BC.E3.82.AB.E3.83.AB.E4.B8.8A.E3.81.AE.E6.8B.A1.E5.BC.B5.E6.A9.9F.E8.83.BD.E5.90.91.E3.81.91.E3.83.AD.E3.82.B0.E3.82.A4.E3.83.B3.E3.82.92.E4.BD.9C.E6.88.90.E3.81.99.E3.82.8B" name=".E3.83.AD.E3.83.BC.E3.82.AB.E3.83.AB.E4.B8.8A.E3.81.AE.E6.8B.A1.E5.BC.B5.E6.A9.9F.E8.83.BD.E5.90.91.E3.81.91.E3.83.AD.E3.82.B0.E3.82.A4.E3.83.B3.E3.82.92.E4.BD.9C.E6.88.90.E3.81.99.E3.82.8B">ローカル上の拡張機能向けログインを作成する</h4>
<pre class="eval"> <span class="nowiki">var extLoginInfo = new nsLoginInfo('chrome://firefoo',
                      'User Registration', null,
                      'bob', '123sEcReT', "", "");</span>
</pre>
<p>ログインマネージャはこれを Web サイトログインであるかのように扱います。開発者は他の拡張機能と衝突することを防ぐため自分の拡張機能の <a class=" external" rel="freelink">chrome://</a> の URL とログインの目的を簡潔に示す realm 文字列を使用しなければなりません。
</p><p>{{ 英語版章題("Storing a password") }}
</p>
<h3 id=".E3.83.91.E3.82.B9.E3.83.AF.E3.83.BC.E3.83.89.E3.82.92.E6.A0.BC.E7.B4.8D.E3.81.99.E3.82.8B" name=".E3.83.91.E3.82.B9.E3.83.AF.E3.83.BC.E3.83.89.E3.82.92.E6.A0.BC.E7.B4.8D.E3.81.99.E3.82.8B"> パスワードを格納する </h3>
<p>ログインマネージャにパスワードを格納するために、最初に <code><a href="ja/NsILoginInfo">nsILoginInfo</a></code> オブジェクトを上記で定義したように作成する必要があります。次に単純に <code><a href="ja/NsILoginManager">nsILoginManager</a></code> のメソッド、<code><a href="ja/NsILoginManager#addLogin.28.29">addLogin()</a></code> をコールしてください。
</p>
<pre class="eval"> myLoginManager.addLogin(loginInfo);
</pre>
<p>{{ Note("この処理はもし &lt;tt&gt;httprealm&lt;/tt&gt; と &lt;tt&gt;formSubmitURL&lt;/tt&gt; の両方の引数が <code>NULL</code> の場合に例外を投げます。パスワードを格納するときには一つは指定されなければなりません。 &lt;tt&gt;hostname&lt;/tt&gt;、&lt;tt&gt;username&lt;/tt&gt;、&lt;tt&gt;password&lt;/tt&gt; も必須引数です。") }}
</p><p>{{ 英語版章題("Retrieving a password") }}
</p>
<h3 id=".E3.83.91.E3.82.B9.E3.83.AF.E3.83.BC.E3.83.89.E3.82.92.E5.8F.96.E5.BE.97.E3.81.99.E3.82.8B" name=".E3.83.91.E3.82.B9.E3.83.AF.E3.83.BC.E3.83.89.E3.82.92.E5.8F.96.E5.BE.97.E3.81.99.E3.82.8B"> パスワードを取得する </h3>
<p>ログインマネージャからパスワードを取得するのはもう少し難しくなります。パスワードを導くための &lt;tt&gt;hostname&lt;/tt&gt;&lt;tt&gt;formSubmitURL&lt;/tt&gt;&lt;tt&gt;httprealm&lt;/tt&gt; はパスワードを見つけるために格納された情報と<b>完全一致</b>しなければなりません。ただ一つの例外はもし &lt;tt&gt;formSubmitURL&lt;/tt&gt; が空文字列で格納された場合、&lt;tt&gt;formSubmitURL&lt;/tt&gt; 引数は無視されます。&lt;tt&gt;hostname&lt;/tt&gt;&lt;tt&gt;formSubmitURL&lt;/tt&gt; の引数が完全な URL からパスを含まないように注意してください。次の例をフォームログインのスターティングポイントとしてご利用ください。
</p>
<pre>var hostname = 'http://www.example.com';
var formSubmitURL = 'http://www.example.com';  // http://www.example.com/foo/auth.cgi ではない
var httprealm = null;
var username = 'user';
var password;

try {
   // ログインマネージャを得る
   var myLoginManager = Components.classes["@mozilla.org/login-manager;1"]
                         .getService(Components.interfaces.nsILoginManager);

   // 与えられた引数に対応する複数のユーザを見つける
   var logins = myLoginManager.findLogins({}, hostname, formSubmitURL, httprealm);

   // 返り値の nsILoginInfo オブジェクトの配列から該当するユーザを見つける
   for (var i = 0; i &lt; logins.length; i++) {
      if (logins[i].username == username) {
         password = logins[i].password;
         break;
      }
   }
}
catch(ex) {
   // nsILoginManger コンポーネントが存在しない場合のみ発生する
}
</pre>
<p>ユーザが複数のパスワードを保護するためにマスターパスワード設定している場合、ユーザはマスターパスワードの入力を求められます。
</p><p>{{ 英語版章題("Removing a password") }}
</p>
<h3 id=".E3.83.91.E3.82.B9.E3.83.AF.E3.83.BC.E3.83.89.E3.82.92.E5.89.8A.E9.99.A4.E3.81.99.E3.82.8B" name=".E3.83.91.E3.82.B9.E3.83.AF.E3.83.BC.E3.83.89.E3.82.92.E5.89.8A.E9.99.A4.E3.81.99.E3.82.8B"> パスワードを削除する </h3>
<p>パスワードの削除は簡単です。
</p>
<pre class="eval"> myLoginManager.removeLogin(loginInfo);
</pre>
<p>パスワードを削除するときに、指定された <code><a href="ja/NsILoginInfo">nsILoginInfo</a></code> オブジェクトは格納された値と<b>完全に一致</b>しなければなりません。そうでなければ例外が発生します。これはパスワード属性を含みます。次の例はパスワードが何であるか実際には知らない場合にパスワードを削除する方法です。
</p>
<pre>// 例としての値
var hostname = 'http://www.example.com';
var formSubmitURL = 'http://www.example.com';
var httprealm = null;
var username = 'user';

try {
   // ログインマネージャを獲得する
   var passwordManager = Components.classes["@mozilla.org/login-manager;1"]
                         .getService(Components.interfaces.nsILoginManager);

   var nsLoginInfo = new Components.Constructor("@mozilla.org/login-manager/loginInfo;1",
                     Components.interfaces.nsILoginInfo);

   // この拡張機能のユーザを見つける
   var logins = passwordManager.findLogins({}, hostname, formSubmitURL, httprealm);

   for (var i = 0; i &lt; logins.length; i++) {
      if (logins[i].username == username) {
         passwordManager.removeLogin(logins[i]);
         break;
      }
   }
}
catch(ex) {
   // これは nsILoginManger コンポーネントクラスが存在しない場合のみ発生する
}
</pre>
<p>{{ 英語版章題("Changing stored login information") }}
</p>
<h3 id=".E6.A0.BC.E7.B4.8D.E6.B8.88.E3.81.BF.E3.83.AD.E3.82.B0.E3.82.A4.E3.83.B3.E6.83.85.E5.A0.B1.E3.82.92.E5.A4.89.E6.9B.B4.E3.81.99.E3.82.8B" name=".E6.A0.BC.E7.B4.8D.E6.B8.88.E3.81.BF.E3.83.AD.E3.82.B0.E3.82.A4.E3.83.B3.E6.83.85.E5.A0.B1.E3.82.92.E5.A4.89.E6.9B.B4.E3.81.99.E3.82.8B">格納済みログイン情報を変更する</h3>
<p>パスワードの変更はとても簡単です。<code><a href="ja/NsILoginManager#removeLogin.28.29">removeLogin()</a></code> の呼び出しに続いて <code><a href="ja/NsILoginManager#addLogin.28.29">addLogin()</a></code> の呼び出しを行うだけだからです。両者に共通する警告として &lt;tt&gt;oldLogin&lt;/tt&gt; は既存のログインと完全一致する必要があります(上記をご覧ください)。 &lt;tt&gt;newLogin&lt;/tt&gt; 属性は正しく設定される必要があります。
</p>
<pre>myLoginManager.modifyLogin(oldLogin, newLogin);</pre>
<p>{{ 英語版章題("Debugging") }}
</p>
<h3 id=".E3.83.87.E3.83.90.E3.83.83.E3.82.B0" name=".E3.83.87.E3.83.90.E3.83.83.E3.82.B0"> デバッグ </h3>
<p>ログインマネージャの実装にはエラーコンソールにデバッグメッセージを送る機能があり、ログインマネージャが何を行っているかを見ることができます。デバッグログを有効にする方法は <a class=" external" href="http://wiki.mozilla.org/Firefox:Password_Manager_Debugging" rel="freelink">http://wiki.mozilla.org/Firefox:Pass...ager_Debugging</a> を参照して下さい。
</p><p>{{ 英語版章題("Supporting older versions of Firefox") }}
</p>
<h3 id=".E5.8F.A4.E3.81.84.E3.83.90.E3.83.BC.E3.82.B8.E3.83.A7.E3.83.B3.E3.81.AE_Firefox_.E3.82.92.E3.82.B5.E3.83.9D.E3.83.BC.E3.83.88.E3.81.99.E3.82.8B.E3.81.9F.E3.82.81.E3.81.AB" name=".E5.8F.A4.E3.81.84.E3.83.90.E3.83.BC.E3.82.B8.E3.83.A7.E3.83.B3.E3.81.AE_Firefox_.E3.82.92.E3.82.B5.E3.83.9D.E3.83.BC.E3.83.88.E3.81.99.E3.82.8B.E3.81.9F.E3.82.81.E3.81.AB"> 古いバージョンの Firefox をサポートするために </h3>
<p>拡張機能が Firefox 3 と以前のバージョンの両者をサポートさせたい場合に <code><a href="ja/NsILoginManager">nsILoginManager</a></code><code><a href="ja/NsIPasswordManager">nsIPasswordManager</a></code> の両方のコンポーネントを実装する必要があります。これを簡単に行う方法は以下のようになります。
</p>
<pre>if ("@mozilla.org/passwordmanager;1" in Components.classes) {
   // パスワードマネージャが存在する場合、Firefox 3 ではない (Firefox 2 や Netscape、SeaMonkey 等)
   // パスワードマネージャのコードを記述する
}
else if ("@mozilla.org/login-manager;1" in Components.classes) {
   // ログインマネージャが存在するので Firefox 3 である
   // ログインマネージャのコードを記述する
}
</pre>
<p><br>
</p><p><br>
</p>
<div class="noinclude">
</div>
{{ languages( { "en": "en/Using_nsILoginManager", "es": "es/Uso_de_nsILoginManager", "fr": "fr/Utilisation_de_nsILoginManager" } ) }}