WebSphere® Application Server는 WebSphere Application
Server 시스템 로그인 모듈 전 또는 후에 사용자 정의 JAAS(Java™ Authentication and Authorization
Service) 로그인 모듈 플러그인을 지원합니다.
그러나 WebSphere Application
Server는 제목에 WSCredential 신임 정보 및 WSPrincipal 프린시펄을 작성하는 데 사용되는 WebSphere Application
Server 시스템 로그인 모듈의 대체를 지원하지 않습니다. 사용자 정의 로그인 모듈을 사용하면
추가로 인증 결정을 내리거나 제목에 정보를 추가하여 Java EE(Java Platform,
Enterprise Edition) 내에서 추가로, 잠재적으로 세분화된 권한 부여 결정을 내릴 수 있습니다.
이 태스크 정보
WebSphere Application Server를 사용하면 사용자 정의 로그인 모듈에 의해 제목에 추가되는
정보 다운스트림을 전파할 수 있습니다. 자세한 정보는
보안 속성 전파의 내용을 참조하십시오. 사용자 정의 로그인 모듈에서 플러그인에 사용할 로그인 구성을
판별하려면 JAAS(Java Authentication and Authorization Service)의 시스템 로그인 구성 항목 설정에 있는 로그인 구성의 설명을 참조하십시오.
WebSphere Application Server는 관리 콘솔을 통해서 및 wsadmin 스크립트 유틸리티를 사용하여
시스템 로그인 구성의 수정을 지원합니다. 관리 콘솔을 사용하여
시스템 로그인 구성을 구성하려면 보안 >
글로벌 보안을 클릭하십시오. Java Authentication
and Authorization Service 아래에서 시스템 로그인을 클릭하십시오.
프로시저
- 시스템 로그인 구성을 구성하십시오.
wsadmin 도구를 사용하여 시스템 로그인 구성을
구성하려면 다음 코드 샘플을 참조하십시오. 다음 샘플 Jacl 스크립트는 사용자 정의 로그인 모듈을 LTPA(Lightweight Third-party Authentication) 웹 시스템 로그인 구성에 추가합니다.
주의: 다음 코드 샘플에서
행 32, 33 및 34는 두 개의 행으로 나누어집니다.
1. #########################################
2. #
3. # Open security.xml
4. #
5. #########################################
6.
7.
8. set sec [$AdminConfig getid /Cell:hillside/Security:/]
9.
10.
11. #########################################
12. #
13. # Locate systemLoginConfig
14. #
15. #########################################
16.
17.
18. set slc [$AdminConfig showAttribute $sec systemLoginConfig]
19.
20. set entries [lindex [$AdminConfig showAttribute $slc entries] 0]
21.
22.
23. #########################################
24. #
25. # Append a new LoginModule to LTPA_WEB
26. #
27. #########################################
28.
29. foreach entry $entries {
30. set alias [$AdminConfig showAttribute $entry alias]
31. if {$alias == "LTPA_WEB"} {
32. set newJAASLoginModuleId [$AdminConfig create JAASLoginModule
$entry {{moduleClassName
"com.ibm.ws.security.common.auth.module.proxy.WSLoginModuleProxy"}}]
33. set newPropertyId [$AdminConfig create Property $newJAASLoginModuleId
{{name delegate}{value "com.ABC.security.auth.CustomLoginModule"}}]
34. $AdminConfig modify $newJAASLoginModuleId
{{authenticationStrategy REQUIRED}}
35. break
36. }
37. }
38.
39.
40. #########################################
41. #
42. # save the change
43. #
44. #########################################
45.
46. $AdminConfig save 47.
주의: wsadmin 스크립트 유틸리티는 새 오브젝트를 목록 끝에 삽입합니다.
사용자 정의 로그인 모듈을 AuthenLoginModule 로그인 모듈 앞에 삽입하려면
AuthenLoginModule 로그인 모듈을 삭제하고 이를 사용자 정의 로그인 모듈에 삽입한 후에 다시 작성하십시오.
샘플 스크립트를
sample.jacl 파일에 저장하고 다음 명령을 사용하여 샘플 스크립트를 실행하십시오.
wsadmin -f sample.jacl
- 현재 LTPA_WEB 로그인 구성 및 모든 로그인 모듈을 제거하십시오.
다음 샘플 Jacl 스크립트를 사용하여 현재 LTPA_WEB 로그인 구성 및 모든 로그인 모듈을 제거하십시오.
48. #########################################
49. #
50. # Open security.xml
51. #
52. #########################################
53.
54.
55. set sec [$AdminConfig getid /Cell:hillside/Security:/]
56.
57.
58. #########################################
59. #
60. # Locate systemLoginConfig
61. #
62. #########################################
63.
64.
65. set slc [$AdminConfig showAttribute $sec systemLoginConfig]
66.
67. set entries [lindex [$AdminConfig showAttribute $slc entries] 0]
68.
69.
70. #########################################
71. #
72. # Remove the LTPA_WEB login configuration
73. #
74. #########################################
75.
76. foreach entry $entries {
77. set alias [$AdminConfig showAttribute $entry alias]
78. if {$alias == "LTPA_WEB"} {
79. $AdminConfig remove $entry
80. break 81. }
82. }
83.
84.
85. #########################################
86. #
87. # save the change
88. #
89. #########################################
90.
91. $AdminConfig save
- 원본 LTPA_WEB 구성을 복구하십시오.
다음 샘플
Jacl 스크립트를 사용하여 원본 LTPA_WEB 구성을 복구할 수 있습니다.
주의: 다음 코드 샘플에서 행 122, 124 및 126은 설명 용도로만 둘 이상의 행으로 나누어집니다.
92. #########################################
93. #
94. # Open security.xml
95. #
96. #########################################
97.
98.
99. set sec [$AdminConfig getid /Cell:hillside/Security:/]
100.
101.
102. #########################################
103. #
104. # Locate systemLoginConfig
105. #
106. #########################################
107.
108.
109. set slc [$AdminConfig showAttribute $sec systemLoginConfig]
110.
111. set entries [lindex [$AdminConfig showAttribute $slc entries] 0]
112.
113.
114.
115. #########################################
116. #
117. # Recreate the LTPA_WEB login configuration
118. #
119. #########################################
120.
121.
122. set newJAASConfigurationEntryId [$AdminConfig create
JAASConfigurationEntry $slc {{alias LTPA_WEB}}]
123.
124. set newJAASLoginModuleId [$AdminConfig create
JAASLoginModule $newJAASConfigurationEntryId
{{moduleClassName
"com.ibm.ws.security.common.auth.module.proxy.WSLoginModuleProxy"}}]
125.
126. set newPropertyId [$AdminConfig create Property
$newJAASLoginModuleId {{name delegate}{value "com.ibm.ws.security.web.AuthenLoginModule"}}]
127.
128. $AdminConfig modify $newJAASLoginModuleId
{{authenticationStrategy REQUIRED}}
129.
130.
131. #########################################
132. #
133. # save the change
134. #
135. #########################################
136.
137. $AdminConfig save
- ltpaLoginModule이 로그인 메소드에서 콜백 배열을 초기화하도록 하십시오.
WebSphere Application
Server 버전 ltpaLoginModule 및 AuthenLoginModule 로그인 모듈은 사용자 로그인 모듈이 정보를 수정할 수 있도록
공유 상태를 사용하여 상태 정보를 저장합니다. ltpaLoginModule 로그인 모듈은
다음 코드를 사용하여 로그인 메소드에서 콜백 배열을 초기화합니다.
콜백 배열은 배열이 공유 상태 영역에 정의되지 않은 경우에만 ltpaLoginModule 로그인 모듈에 의해 작성됩니다.
다음 코드 샘플에서 오류 처리 코드는 샘플을 간결하게 하기 위해 제거됩니다.
사용자 정의 로그인 모듈을 ltpaLoginModule 로그인 모듈 앞에 삽입하면 사용자 정의 로그인 모듈은 콜백을
공유 상태로 저장하기 위해 동일한 스타일을 따라야 할 수도 있습니다.
주의: 다음 코드 샘플에서
몇몇 코드 행은 설명 용도로만 두 개의 행으로 나누어집니다.
138. Callback callbacks[] = null;
139. if (!sharedState.containsKey(
com.ibm.wsspi.security.auth.callback.Constants. CALLBACK_KEY)) {
140. callbacks = new Callback[3];
141. callbacks[0] = new NameCallback("Username: ");
142. callbacks[1] = new PasswordCallback("Password: ", false);
143. callbacks[2] = new com.ibm.websphere.security.auth.callback.
WSCredTokenCallbackImpl( "Credential Token: ");
144. try {
145. callbackHandler.handle(callbacks);
146. } catch (java.io.IOException e) {
147. . . .
148. } catch (UnsupportedCallbackException uce) {
149. . . .
150. }
151. sharedState.put( com.ibm.wsspi.security.auth.callback.
Constants.CALLBACK_KEY, callbacks);
152. } else {
153. callbacks = (Callback []) sharedState.get
( com.ibm.wsspi.security.auth.callback.Constants.CALLBACK_KEY);
154. }
- AuthenLoginModule이 콜백 배열을 초기화하도록 하십시오.
ltpaLoginModule 및 AuthenLoginModule 로그인 모듈은
WSPrincipal 오브젝트 및 WSCredential 오브젝트 둘 모두를 생성하여 인증된 사용자 ID 및 보안 신임 정보를 나타냅니다.
WSPrincipal 및 WSCredential 오브젝트는 또한 공유 상태에 저장됩니다. JAAS
로그인은 2단계 커미트 프로토콜을 사용합니다.
먼저 로그인 구성에 구성되어 있는 로그인 모듈에서 로그인 메소드가 호출됩니다.
그런 다음 이들의 커미트 메소드가 호출됩니다. ltpaLoginModule 및 AuthenLoginModule
로그인 모듈 이후에 삽입되는 사용자 정의 로그인 모듈은 이러한 오브젝트가 커미트되기 전에 WSPrincipal 및 WSCredential 오브젝트를 수정할 수 있습니다.
WSCredential 및 WSPrincipal 오브젝트는 로그인이 완료된 후에 제목에 존재해야 합니다.
이러한 오브젝트가 제목에 없으면, WebSphere Application Server 런타임 코드는
보안 결정을 내리기 위해 제목을 거부합니다.
AuthenLoginModule은 다음 코드를 사용하여
콜백 배열을 초기화합니다.
주의: 다음 코드 샘플에서
몇몇 코드 행은 설명 용도로만 두 개의 행으로 나누어집니다.
155. Callback callbacks[] = null;
156. if (!sharedState.containsKey( com.ibm.wsspi.security.auth.
callback.Constants.CALLBACK_KEY)) {
157. callbacks = new Callback[6];
158. callbacks[0] = new NameCallback("Username: ");
159. callbacks[1] = new PasswordCallback("Password: ", false);
160. callbacks[2] = new com.ibm.websphere.security.auth.callback.
WSCredTokenCallbackImpl( "Credential Token: ");
161. callbacks[3] = new com.ibm.wsspi.security.auth.callback.
WSServletRequestCallback( "HttpServletRequest: ");
162. callbacks[4] = new com.ibm.wsspi.security.auth.callback.
WSServletResponseCallback( "HttpServletResponse: ");
163. callbacks[5] = new com.ibm.wsspi.security.auth.callback.
WSAppContextCallback( "ApplicationContextCallback: ");
164. try {
165. callbackHandler.handle(callbacks);
166. } catch (java.io.IOException e) {
167. . . .
168. } catch (UnsupportedCallbackException uce {
169. . . .
170. }
171. sharedState.put( com.ibm.wsspi.security.auth.callback.
Constants.CALLBACK_KEY, callbacks);
172. } else {
173. callbacks = (Callback []) sharedState.get(com.ibm.wsspi.security.
auth.callback.Constants.CALLBACK_KEY);
174. }
- 애플리케이션 컨텍스트를 구하십시오. 로그인의 콜백 정보를 포함하는 세 개의 오브젝트가 추가로
웹 컨테이너에서 AuthenLoginModule 로그인 모듈로 전달됩니다. java.util.Map,
HttpServletRequest 및 HttpServletResponse 오브젝트. 이러한 오브젝트는 웹 애플리케이션 컨텍스트를 나타냅니다.
WSAppContextCallback 오브젝트에서 getContext 메소드를 호출하여 애플리케이션 컨텍스트,
java.util.Map 오브젝트를 구할 수 있습니다. java.util.Map 오브젝트는 다음 배치 디스크립터 정보를 사용하여 작성됩니다.
주의: 다음 코드 샘플에서
몇몇 코드 행은 설명 용도로만 두 개의 행으로 나누어집니다.
175. HashMap appContext = new HashMap(2);
176. appContext.put( com.ibm.wsspi.security.auth.callback.
Constants.WEB_APP_NAME,web_application_name);
177. appContext.put( com.ibm.wsspi.security.auth.callback.Constants.
REDIRECT_URL,errorPage);
다음에 수행할 작업
애플리케이션 이름과 HttpServletRequest 오브젝트는 맵핑 기능을 수행하기 위해 사용자 정의 로그인 모듈에 의해
읽힐 수 있습니다. 양식 기반 로그인의 오류 페이지는 사용자 정의 로그인 모듈에 의해 수정될 수도 있습니다.
JAAS 프레임워크에 추가로, WebSphere Application
Server는 신뢰 연관 인터페이스(TAI)를 지원합니다.
또 다른 신임 정보 유형 및 정보를
사용자 정의 로그인 모듈을 사용하여 인증 프로세스 동안에 호출자 제목에 추가할 수 있습니다.
호출자 제목에서 써드파티 신임 정보는 보안 컨텍스트의 일부로서 WebSphere Application Server에 의해 관리됩니다.
호출자 제목은 요청 처리 동안에 실행 스레드에 바인드됩니다. 웹 또는 EJB(Enterprise JavaBeans) 모듈이 호출자 ID를 사용하도록 구성된 경우에는 사용자 ID는
EJB 요청에서 다운스트림 서비스로 전파됩니다. 호출자 제목에서 WSCredential 신임 정보 및 써드파티 신임 정보는 다운스트림 전파되지 않습니다.
대신 일부 정보는 전파된 ID를 기반으로 하는 대상 서버에서 재생성될 수 있습니다.
인증 단계에서 써드파티 신임 정보를 호출자 제목에 추가하십시오. WSSubject.getCallerSubject 메소드로부터 리턴된 호출자
제목은 읽기 전용이며 수정할 수 없습니다. WSSubject 제목에 대한 자세한 정보는 JAAS의 스레드로부터 호출자 제목 얻기의 내용을 참조하십시오.