aboutsummaryrefslogtreecommitdiff
path: root/files/ko/using_nsiloginmanager/index.html
blob: 738636ae3e419601e3085e9b43b200f7dca29a53 (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
---
title: Using nsILoginManager
slug: Using_nsILoginManager
tags:
  - Firefox 3
  - Interfaces
translation_of: Mozilla/Tech/XPCOM/Reference/Interface/nsILoginManager/Using_nsILoginManager
---
<p></p>
<h3 id=".EB.A1.9C.EA.B7.B8.EC.9D.B8_.EA.B4.80.EB.A6.AC.EC.9E.90.EB.A1.9C_.EC.9E.91.EC.97.85_.ED.95.98.EA.B8.B0" name=".EB.A1.9C.EA.B7.B8.EC.9D.B8_.EA.B4.80.EB.A6.AC.EC.9E.90.EB.A1.9C_.EC.9E.91.EC.97.85_.ED.95.98.EA.B8.B0">로그인 관리자로 작업 하기</h3>
<p>확장은 종종 외부 사이트나 웹 애플리케이션 등의 암호를 안전하게 저장할 필요가 있습니다. 그러기 위해서는 민감한 암호 정보를 저장하기 위한 안전한 저장소를 제공하는 <code><a href="ko/NsILoginManager">nsILoginManager</a></code>와 로그인 정보를 저장하는 방법을 제공하는 <code><a href="ko/NsILoginInfo">nsILoginInfo</a></code>를 사용할 수 있습니다.</p>
<h3 id="nsILoginManager_.EC.96.BB.EA.B8.B0" name="nsILoginManager_.EC.96.BB.EA.B8.B0"><code>nsILoginManager 얻기</code></h3>
<p><code>nsILoginManager</code>를 구현한 콤포넌트를 얻으려면 다음 코드를 사용합니다.</p>
<pre>var passwordManager = Components.classes["@mozilla.org/login-manager;1"]
                                .getService(Components.interfaces.nsILoginManager);
</pre>
<p>대부분의 로그인 관리자 함수는 <code><a href="ko/NsILoginInfo">nsILoginInfo</a></code> 개체를 매개 변수로 취합니다. <code><a href="ko/NsILoginInfo">nsILoginInfo</a></code> 개체는 다음과 같은 속성을 포함합니다: hostname, form submit URL, HTTP realm, username, username field, password, password field. hostname, username, password는 필수 속성이지만 기타 필드는 로그인이 웹 페이지 양식을 위한 것인지 아니면 HTTP/FTP 인증 사이트 로그인인지에 따라 설정됩니다. 자세한 정보는 <code><a href="ko/NsILoginInfo">nsILoginInfo</a></code> 속성 정의를 참고하시기 바랍니다. <code><a href="ko/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>
<h3 id=".EC.98.88.EC.A0.9C" name=".EC.98.88.EC.A0.9C">예제</h3>
<h4 id=".EC.9B.B9_.ED.8E.98.EC.9D.B4.EC.A7.80.EB.A5.BC_.EC.9C.84.ED.95.9C_.EB.A1.9C.EA.B7.B8.EC.9D.B8_.EC.83.9D.EC.84.B1" name=".EC.9B.B9_.ED.8E.98.EC.9D.B4.EC.A7.80.EB.A5.BC_.EC.9C.84.ED.95.9C_.EB.A1.9C.EA.B7.B8.EC.9D.B8_.EC.83.9D.EC.84.B1">웹 페이지를 위한 로그인 생성</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>
<h4 id=".EC.82.AC.EC.9D.B4.ED.8A.B8_.EC.9D.B8.EC.A6.9D_.EB.A1.9C.EA.B7.B8.EC.9D.B8_.EC.83.9D.EC.84.B1" name=".EC.82.AC.EC.9D.B4.ED.8A.B8_.EC.9D.B8.EC.A6.9D_.EB.A1.9C.EA.B7.B8.EC.9D.B8_.EC.83.9D.EC.84.B1">사이트 인증 로그인 생성</h4>
<pre class="eval"> <span class="nowiki">var authLoginInfo = new nsLoginInfo('http://www.example.com',
                       null, 'ExampleCo Login',
                       'alice', 'SeCrEt321', null, null);</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>
<h4 id=".EC.A7.80.EC.97.AD_.ED.99.95.EC.9E.A5_.EB.A1.9C.EA.B7.B8.EC.9D.B8_.EC.83.9D.EC.84.B1" name=".EC.A7.80.EC.97.AD_.ED.99.95.EC.9E.A5_.EB.A1.9C.EA.B7.B8.EC.9D.B8_.EC.83.9D.EC.84.B1">지역 확장 로그인 생성</h4>
<pre class="eval"> <span class="nowiki">var extLoginInfo = new nsLoginInfo('chrome://firefoo',
                      'User Registration', null,
                      'bob', '123sEcReT', null, null);</span>
</pre>
<p>로그인 관리자는 이를 웹 사이트 로그인인 것처럼 취급합니다. 다른 확장과 충돌을 피하려면 확장의 <a class="external" rel="freelink">chrome://</a> URL과 로그인의 목적을 나타내는 영역 문자열을 사용해야 합니다.</p>
<h3 id=".EC.95.94.ED.98.B8_.EC.A0.80.EC.9E.A5.ED.95.98.EA.B8.B0" name=".EC.95.94.ED.98.B8_.EC.A0.80.EC.9E.A5.ED.95.98.EA.B8.B0">암호 저장하기</h3>
<p>로그인 관리자에 암호를 저장하려면 먼저 위에서 정의한 대로 <code><a href="ko/NsILoginInfo">nsILoginInfo</a></code> 개체를 생성해야 합니다. 그리고 나서 간단하게 <code><a href="ko/NsILoginManager">nsILoginManager</a></code>의 메소드인 <code><a href="ko/NsILoginManager#addLogin.28.29">addLogin()</a></code>를 호출합니다.</p>
<pre class="eval"> myLoginManager.addLogin(loginInfo);
</pre>
<p></p><div class="blockIndicator note"><strong>주의:</strong> &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; 매개 변수 또한 필수입니다.</div><p></p>
<h3 id=".EC.95.94.ED.98.B8_.EA.B5.AC.ED.95.98.EA.B8.B0" name=".EC.95.94.ED.98.B8_.EA.B5.AC.ED.95.98.EA.B8.B0">암호 구하기</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';  // not http://www.example.com/foo/auth.cgi
var httprealm = null;
var username = 'user';
var password;

try {
   // Get Login Manager
   var myLoginManager = Components.classes["@mozilla.org/login-manager;1"]
                         .getService(Components.interfaces.nsILoginManager);

   // Find users for the given parameters
   var logins = myLoginManager.findLogins({}, hostname, formSubmitURL, httprealm);

   // Find user from returned array of nsILoginInfo objects
   for (var i = 0; i &lt; logins.length; i++) {
      if (logins[i].username == username) {
         password = logins[i].password;
         break;
      }
   }
}
catch(ex) {
   // This will only happen if there is no nsILoginManager component class
}
</pre>
<p>사용자가 암호를 안전하게 보관하도록 마스터 암호를 지정했다면 이를 입력하라는 요청을 받게 된다는 점을 참고하십시오.</p>
<h3 id=".EC.95.94.ED.98.B8_.EC.A0.9C.EA.B1.B0.ED.95.98.EA.B8.B0" name=".EC.95.94.ED.98.B8_.EC.A0.9C.EA.B1.B0.ED.95.98.EA.B8.B0">암호 제거하기</h3>
<p>암호를 제거하는 것은 간단합니다.</p>
<pre class="eval"> myLoginManager.removeLogin(loginInfo);
</pre>
<p>암호를 제거할 때 지정한 <code><a href="ko/NsILoginInfo">nsILoginInfo</a></code> 개체는 저장된 것과 <b>정확하게 일치해야</b> 하며 그렇지 않으면 예외가 발생합니다. 이는 password 속성을 포함합니다. 여기에 실제로 암호가 무엇인지 모르면서 암호를 제거하는 방법을 보여주는 예제가 있습니다.</p>
<pre>// example values
var hostname = 'http://www.example.com';
var formSubmitURL = 'http://www.example.com';
var httprealm = null;
var username = 'user';

try {
   // Get Login Manager
   var passwordManager = Components.classes["@mozilla.org/login-manager;1"]
                         .getService(Components.interfaces.nsILoginManager);

   // Find users for this extension
   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) {
   // This will only happen if there is no nsILoginManager component class
}
</pre>
<h3 id=".EC.A0.80.EC.9E.A5.EB.90.9C_.EB.A1.9C.EA.B7.B8.EC.9D.B8_.EC.A0.95.EB.B3.B4_.EB.B3.80.EA.B2.BD.ED.95.98.EA.B8.B0" name=".EC.A0.80.EC.9E.A5.EB.90.9C_.EB.A1.9C.EA.B7.B8.EC.9D.B8_.EC.A0.95.EB.B3.B4_.EB.B3.80.EA.B2.BD.ED.95.98.EA.B8.B0">저장된 로그인 정보 변경하기</h3>
<p>암호를 변경하는 것은 간단합니다. 여기에서 하는 모든 일은 <code><a href="ko/NsILoginManager#removeLogin.28.29">removeLogin()</a></code>를 호출하고 나서 <code><a href="ko/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>
<h3 id=".EB.94.94.EB.B2.84.EA.B9.85" name=".EB.94.94.EB.B2.84.EA.B9.85">디버깅</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>
<h3 id="Firefox_.EA.B5.AC_.EB.B2.84.EC.A0.84_.EC.A7.80.EC.9B.90" name="Firefox_.EA.B5.AC_.EB.B2.84.EC.A0.84_.EC.A7.80.EC.9B.90">Firefox 구 버전 지원</h3>
<p>여러분의 확장이 Firefox 3와 구 버전을 모두 지원하기를 바란다면 <code><a href="ko/NsILoginManager">nsILoginManager</a></code><code><a href="ko/NsIPasswordManager">nsIPasswordManager</a></code> 콤포넌트를 모두 구현해야 합니다. 이를 위한 간단한 방법은 다음과 같습니다.</p>
<pre>if ("@mozilla.org/passwordmanager;1" in Components.classes) {
   // Password Manager exists so this is not Firefox 3 (could be Firefox 2, Netscape, SeaMonkey, etc).
   // Password Manager code
}
else if ("@mozilla.org/login-manager;1" in Components.classes) {
   // Login Manager exists so this is Firefox 3
   // Login Manager code
}
</pre>
<p> </p>
<p> </p>
<p> </p>
<div class="noinclude">
  </div>
<p></p>