저자 Web Services Security Group 소속의 Shyam Rao
이 아티클의 영문 원본은
http://java.sun.com/mailers/techtips/en ··· html%232
에서 볼수 있습니다.
2007년 3월 테크팁, WSIT를 사용한 웹 서비스 보안에서는 Java EE와 .Net 간의 상호 운용성을 실현하는 오픈 웹 서비스 기술 구현인 WSIT(Web Services Interoperability Technology)를 소개한 바 있다. JAX-WS(Java API for XML Web Services)를 기반으로 하는 WSIT는 안정적인 메시징, 트랜잭션 처리, 보안 등의 웹 서비스 상호 운용성에 대한 주요 측면을 다룬다. 그 팁에서는 WSIT를 소개한 다음 동일한 보안 도메인의 서비스에 클라이언트가 액세스할 수 있도록 WSIT에서 WS-Security 지원을 사용하는 방법에 대해 알아보았다. 또한 다른 보안 도메인의 서비스에 액세스하기 위해 WSIT에서 WS-Trust 지원을 사용하는 방법도 소개했다.
그 팁의 확장편에 해당하는 이번 팁에서는 다음 사항을 집중 조명한다.
- sender-vouches SAML 논리식을 사용하는 지원 토큰
- STS(Security Token Service) 발급 토큰
sender-vouches SAML 논리식이 있는 지원 토큰과 STS 발급 토큰을 함께 사용할 경우 STS로부터 토큰을 발급하여 이를 웹 서비스 클라이언트가 아닌 사용자에게 위임할 수 있다.
발급된 토큰이 웹 서비스 클라이언트가 아니라 웹 서비스 클라이언트와 직접 신뢰 관계에 있는 다른 엔터티를 대상으로 하는 경우가 있다. 이러한 시나리오에서 웹 서비스 클라이언트는 프록시 역할을 한다. 실제 사용자는 자신의 신뢰할 수 있는 자격 증명을 사용하여 이 프록시에 로그인한다. 그런 다음 웹 서비스 클라이언트가 실제 사용자를 대신하여 STS, 즉 웹 서비스 클라이언트 신뢰 STS로부터 토큰을 요청한다. STS가 토큰을 발급하는데, 이는 웹 서비스 클라이언트가 아니라 실제 사용자가 사용할 용도이다.
이번 팁에서 학습할 내용은 다음과 같다.
- 지원 토큰
- Sender-vouches SAML 논리식
- WSIT의 WS-Trust 확장
또한 다음 내용도 다룬다.
- 요청자의 SAML 토큰으로부터 발급될 SAML 토큰에 실제 사용자의 세부 정보를 채운다.
- 확장과 함께 WS-Trust 애플리케이션을 개발한다.
샘플 애플리케이션 패키지가 이 팁에 제공된다. 이 팁의 코드 예제는 해당 패키지에 포함된 샘플의 소스 코드에서 따온 것이다.
지원 토큰
WS-Security에서 보안 바인딩은 메시지 교환을 보호하기 위해 토큰을 사용한다. X509 인증서와 같은 보안 자격 증명을 나타내는 토큰은 메시지의 전체 또는 일부에 서명할 때 사용된다. 이 서명을 메시지 서명이라고 한다. 지원 토큰은 메시지 서명과 연결된 토큰에서 제공하는 클레임을 보강한다.
지원 토큰에는 보안 바인딩에서 참조할 수 있는 4개의 등록 정보, 즉 supporting tokens, signed supporting tokens, endorsing supporting tokens 및 signed endorsing supporting tokens가 있다. 각 등록 정보는 논리식, SupportingTokens, SignedSupportingTokens, EndorsingSupportingTokens 및 SignedEndorsingSupportingTokens에서 지정한다.
지원 토큰에 대한 자세한 내용은 웹 서비스 보안 정책 문서를 참조한다.
Sender-Vouches SAML 논리식
SAML(Security Assertion Markup Language)은 보안 도메인 간에 인증 및 권한 부여 데이터를 교환하기 위한 XML 표준이다. 인증 및 권한 부여 정보는 SAML 논리식에서 지정되는데, 이 논리식은 ID 공급자(논리식 생성자)와 서비스 공급자(논리식 사용자) 사이에 전달된다. SAML 논리식은 메시지의 보안 헤더에 포함되어 SOAP 메시지에 첨부된다.
보안 바인딩에서 지정할 수 있는 지원 토큰 중 하나가 SAML 토큰이다. SAML 토큰은 SAML 논리식을 보안 토큰으로 사용한다. SAML 토큰의 유형 중 하나가 sender-vouches SAML 토큰이다. 이 토큰은 sender-vouches 메소드를 사용하여 SOAP 메시지와 SOAP 메시지에 추가된 SAML 논리식 간의 연관성을 설정한다. 입증(attesting) 엔터티는 SAML 논리식의 SAML subject 문의 subject와 SOAP 메시지 컨텐츠 간의 연관성을 설정할 때 쓰일 확인 증거(confirmation evidence)를 제공한다.
sender-vouches 메소드에 대한 자세한 내용은 Web Services Security: SAML 토큰 프로필 문서를 참조한다.
WSIT의 WS-Trust 확장
이번 팁에서 사용한 기술은 WSIT의 WS-Trust 구현이 공개하는 확장을 활용한다. 이 확장은 사용자에 대한 WSIT STS 구현의 투명성을 강화한다. 비즈니스 요구사항에 따라 STS를 구현하려는 경우 이 확장 지점을 구현할 수 있다.
2007년 3월 테크팁에 따르면, STS는 클라이언트와 서비스가 서로 다른 보안 도메인에 있고 직접 신뢰 관계가 존재하지 않을 경우 클라이언트가 그 서비스에 접근하도록 보안 토큰을 발급할 때 사용할 수 있는 신뢰 기관이다.
WSIT의 WS-Trust 구현은 다음 확장을 공개한다.
STSAuthorizationProvider. 이 확장은 STS에서 발급할 토큰에 대해 런타임 요청자 권한 부여를 가능하게 한다. 예를 들어, 두 명의 사용자를 만들고, 공급자 구현에서 사용자 중 한 명에게만 대상 서비스 접근을 허용하는 권한 부여 논리를 포함시킬 수 있다. 사용자의 Subject principal에서 사용자의 이름을 가져온다.
STSAttributeProvider. 이 확장은 STS에서 발급할 토큰에 요청자의 세부 정보를 포함시킬 수 있게 한다. 이 확장이 구현되면 공급자 구현은 STS에서 생성한 SAML 논리식에 포함된 속성을 반환한다. 사용자는 서로 다른 서비스마다 다른 ID를 가질 수 있다. 서로 다른 서비스에 대한 ID 매핑이 존재할 수 있다. 서비스측에서는 공급자 구현에서 반환한 실제 사용자 ID와 속성이 포함되었는지 확인하기 위해 SAML 토큰 검증자(validator)를 제공할 수 있다. 예를 들어, 대상 서비스가http:// ...이고 role 및 email address와 같은 속성이 있을 때 alice라는 이름의 사용자가 abcd와 매핑한다고 가정한다. 그러면 발급된 SAML 토큰은 사용자의 역할과 같은 사용자 속성을 포함하며, 이는 서비스에 대한 권한 부여에 쓰일 수 있다.
STSConfigurationProvider. 이 확장을 STS의 WSDL<STSConfiguration>요소에서 지정한 범위를 넘어서 STS 구성 등록 정보를 추가하거나 대체할 수 있게 한다. STS WSDL은 STS 발급자, 이 STS에서 발급한 토큰의 암호화 필요 여부, STS에서 발급한 키의 암호화 필요 여부 등 STS 구성을 위한 속성을 지정한다. STSConfiguration 요소를 작성하고 런타임 시 일부 등록 정보의 값을 변경하려면 이 공급자를 구현해야 한다.
공급자는 com.sun.xml.ws.api.security.trust.STSAttributeProvider와 같은 파일 이름을 갖는 표준 ServiceFinder를 사용하여 STS에 확장 구현을 플러그인할 수 있다. 이 파일은 실제 구현 클래스를 포함한다.
STS에서 발급할 SAML 토큰에 실제 사용자 세부 정보 채우기
클라이언트가 자신의 인증서를 보유하지 않으며 다만 STS/서비스 인증서에 대해 알고 있다고 가정한다. 이 경우 STS/서비스는 클라이언트가 암호화된 사용자 이름(Username) 토큰을 사용하여 인증하도록 요구한다. 사용자 이름 토큰은 사용자 이름을 기준으로 STS/서비스에 요청자를 식별하는 수단 중 하나이다.
역시 STS가 서비스와 통신하도록 클라이언트에 SAML 토큰을 발급한다고 가정한다. SAML 토큰은 SAML 논리식을 보안 토큰으로 사용한다. STS가 발급된 SAML 토큰에 사용자의 클레임을 채울 수 있는 방법에는 3가지가 있다.
- 개발 코드에서 사용자의 클레임에 액세스한다. 이는 실제 애플리케이션에서 별로 유용하지 않다.
- 런타임 시 지정된 사용자 ID 및 속성 값을 반환하도록 WSIT의 WS-Trust 구현에서
STSAttributeProvider확장을 구현한다.
- WSIT의 WS-Trust 구현에서
STSAttributeProvider확장을 구현하고 요청자의 SAML 토큰에서 지정한 사용자의 클레임을 사용한다. 그러면 요청자의 SAML 토큰이PublicCredentialSet에 추가된다. 이는 클라이언트의 subject에서 보유한 공개 자격 증명의 세트이다. WSIT를StreamingSecurity(기본값)와 함께 사용할 경우 요청자의 SAML이XMLStreamReader형태로 추가된다. WSIT를DisableStreamingSecurity정책 논리식과 함께 사용할 경우 SAML 논리식은PublicCredential세트에 DOM 요소의 형태로 추가된다.DisableStreamingSecurity에 대한 자세한 내용은 블로그 WSIT Milestone 3에서 개선된 XWISS 구현을 참조한다.
(1) STS WSDL에 서명된 지원 SAML 토큰을 추가하고(그러면 토큰 발급을 위해 사용자에 대한 정보가 STS로 전달됨) (2) STSAttributeProvider 확장을 구현하는 방법으로 세 번째 방법을 구현할 수 있다.
예를 들어, 다음은 SAML 토큰을 서명된 지원 토큰으로 포함시키기 위한 STS WSDL의 논리식 중 일부이다(이 예제 중 몇 줄은 페이지 너비에 맞추기 위해 줄 바꿈되었음).
<sp:SignedSupportingTokens xmlns:sp= "http://schemas.xmlsoap.org/ws/2005/07/securitypolicy"> <wsp:Policy xmlns: wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"> <sp:SamlToken sp:IncludeToken= "http://schemas.xmlsoap.org/ws/2005/07/ securitypolicy/IncludeToken/AlwaysToRecipient"> <wsp:Policy> <sp:WssSamlV11Token10></sp:WssSamlV11Token10> </wsp:Policy> </sp:SamlToken> </wsp:Policy> </sp:SignedSupportingTokens>
이와 비슷하게 SAML 토큰을 서명된 지원 토큰으로, Username/X509 토큰을 일반 웹 서비스 권한 부여용으로 전달할 수 있다.
다음은 발급된 SAML 토큰을 실제 사용자의 클레임으로 채우는 STSAttributeProvider 확장의 샘플 공급자 구현 중 일부이다.
public class SampleSTSAttributeProvider implements STSAttributeProvider{ public Map<QName, List<String>> getClaimedAttributes( final Subject subject, final String appliesTo, final String tokenType, final Claims claims){ final Set<Principal> principals = subject.getPrincipals(); final Set publicCredential = subject.getPublicCredentials(); final Map<QName, List<String>> attrs = new HashMap<QName, List<String>>() // You can iterate over the client's // subject.getPublicCredentials() for the SAML token and // retrieve the values(NameIdentifier, Attributes) from // it and set it in the SAML Token to be issued. You can // find a description of the actual implementation of // this part later in this TechTip. You can also find // this code in the sample package return attrs; } }
또한 토큰이 발급되기 위해 웹 서비스 클라이언트의 권한 부여 클레임을 확인하도록 STSAuthorizationProvider 확장 및 STSAttributeProvider 확장을 구현할 수 있다.
확장과 함께 WS-Trust 애플리케이션 개발
"SAML 토큰에서 실제 사용자의 세부 정보 채우기"에서 집중 조명한 기술, 즉 STSAttributeProvider 확장을 구현하고 요청자의 SAML 토큰에 지정된 사용자의 클레임을 사용하는 기술을 적용한 애플리케이션을 만들어 보자. NetBeans IDE를 사용하여 애플리케이션을 개발한다. NetBeans IDE는 NetBeans 사이트에서 다운로드할 수 있다.
이 애플리케이션을 빌드하려면
- "Username Authentication with Symmetric Keys"라는 기존 NetBeans 보안 프로필에 서명된 지원 SAML 토큰을 포함시킨다.
- 요청자의 SAML 토큰에서 발급할 SAML 토큰에 실제 사용자의 이름 식별자와 속성을 채우도록
STSAttributeProvider확장을 구현한다.
STSAttributeProvider확장 구현을 STS에 플러그인한다.
- 클라이언트의 SAML 처리기를 구현한다.
- 실제 사용자의 사용자 이름 및 비밀번호를 가져온다.
"Username Authentication with Symmetric Keys"라는 기존 NetBeans 프로필에 서명된 지원 SAML 토큰을 포함시키려면
- NetBeans를 사용하여 STS 프로젝트를 만든다.
- 프로젝트를 마우스 오른쪽 버튼으로 클릭한다. Edit Web Services Attribute를 선택한다. 그런 다음 Username Authentication with Symmetric key 보안 메커니즘을 선택한다. 그에 대해 다음 WSDL이 생성된다(이 예제의 몇 줄은 페이지 너비에 맞추기 위해 줄 바꿈되었음).
<sp:SignedSupportingTokensxmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy"><wsp:Policyxmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"><sp:UsernameTokensp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/AlwaysToRecipient"><wsp:Policy><sp:WssUsernameToken10/></wsp:Policy></sp:UsernameToken></wsp:Policy></sp:SignedSupportingTokens>
- 생성된 STS WSDL을 편집하여 SAML 토큰을 위한
SignedSupportingTokens논리식을 기존SignedSupportingTokens논리식 바로 아래에 추가한다(이 예제의 몇 줄은 페이지 너비에 맞추기 위해 줄 바꿈되었음).<sp:SignedSupportingTokensxmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy"><wsp:Policyxmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"><sp:UsernameTokensp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/AlwaysToRecipient"><wsp:Policy><sp:WssUsernameToken10/></wsp:Policy></sp:UsernameToken></wsp:Policy></sp:SignedSupportingTokens><sp:SignedSupportingTokensxmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy"><wsp:Policyxmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"><sp:SamlTokensp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/AlwaysToRecipient"><wsp:Policy><sp:WssSamlV11Token10></sp:WssSamlV11Token10></wsp:Policy></sp:SamlToken></wsp:Policy></sp:SignedSupportingTokens>
요청자의 SAML 토큰에서 발급할 SAML 토큰에 실제 사용자의 이름 식별자와 속성을 채우도록 STSAttributeProvider 확장을 구현하려면
- 발급된 토큰의 이름 식별자를 요청자의 SAML 토큰에 있는 식별자로 채우는 클래스를 작성한다. 다음은 WSIT의 스트리밍 보안을 사용하여 그 작업을 수행하는 클래스의 코드 단편이다(이 예제의 몇 줄은 페이지 너비에 맞추기 위해 줄 바꿈되었음).
String name_identifier = null;Iterator iterator = publicCredential.iterator();while (iterator.hasNext()){Object obj = iterator.next();if (obj instanceof XMLStreamReader){XMLStreamReader samlAssertion = (XMLStreamReader)obj;try {if(samlAssertion.getEventType()!= XMLStreamReader.START_DOCUMENT)StreamUtil.moveToNextElement(samlAssertion);while(samlAssertion.getEventType()!= XMLStreamReader.END_DOCUMENT){if (samlAssertion.getLocalName().equals("NameIdentifier") ||samlAssertion.getLocalName().equals("NameID")){name_identifier = samlAssertion.getElementText();}samlAssertion.next();}} catch (XMLStreamException ex) {System.out.println("Exception while reading SamlAssertion as XMLStreamReader : "+ex);}}}if (name_identifier != null){List<String> nameIds = new ArrayList<String>();nameIds.add(name_identifier);attrs.put(new QName("http://sun.com",NAME_IDENTIFIER), nameIds);}
- 발급된 토큰의 속성을 요청자의 SAML 토큰에 있는 속성으로 채우는 클래스를 작성한다. 다음은 WSIT의 스트리밍 보안을 사용하여 그 작업을 수행하는 클래스의 코드 단편이다(이 예제의 몇 줄은 페이지 너비에 맞추기 위해 줄 바꿈되었음).
String name_identifier = null;Iterator iterator = publicCredential.iterator();while (iterator.hasNext()){Object obj = iterator.next();if (obj instanceof XMLStreamReader){XMLStreamReader samlAssertion = (XMLStreamReader)obj;try {if(samlAssertion.getEventType() ==XMLStreamReader.START_DOCUMENT)StreamUtil.moveToNextElement(samlAssertion);while(samlAssertion.getEventType()!= XMLStreamReader.END_DOCUMENT){if (samlAssertion.getEventType() ==XMLStreamReader.START_ELEMENT&& samlAssertion.getLocalName().equals("Attribute")){int attributeCount =samlAssertion.getAttributeCount();for (int i=0; i<attributeCount; i++){if(samlAssertion.getAttributeLocalName(i).equals("AttributeName")||samlAssertion.getAttributeLocalName(i).equals("Name")){// Set up a dummy attribute valuefinal QName key = new QName("http://sun.com",samlAssertion.getAttributeValue(i));List<String> tokenRequestor =new ArrayList<String>();if(samlAssertion.hasNext()){samlAssertion.next();if (samlAssertion.getLocalName().equals("AttributeValue")){tokenRequestor.add(samlAssertion.getElementText());attrs.put(key, tokenRequestor);break;}}}}}samlAssertion.next();}} catch (XMLStreamException ex) {System.out.println("Exception while reading SamlAssertion as XMLStreamReader : "+ex);}}}
STSAttributeProvider 확장 구현을 STS에 플러그인하려면
- 이미 생성된 STS 프로젝트를 NetBeans에서 연다.
- Source Packages 아래에
META-INF/services라는 이름의 2단계 디렉토리를 생성한다.
META-INF/services디렉토리 아래에com.sun.xml.ws.api.security.trust.STSAttributeProvider라는 이름의 파일을 만든다. 이 파일은 샘플 패키지를 위한 구현 클래스인fs.simple.sts.SampleSTSAttributeProvider를 포함한다.
- 표준 서비스 검색 메커니즘을 사용하여
STSAttributeProvider확장 구현을 STS에 플러그인한다.
클라이언트의 SAML 처리기를 구현하려면
- 클라이언트를 위한 프로젝트를 만든다.
- XWSS 프로젝트 유틸리티 페이지에서 SAML Callback Handler 구현을 다운로드한다. 인증서 있는 SAML Sender Vouches를 만들기 위해 다운로드된 SAML Callback Handler 그대로,
xwss.saml라는 패키지 이름으로 사용할 수 있다. 그러나 SAML Holder-of-Key의 경우 콜백 처리기 구현에서 두 문을 편집해야 한다.// home must be the GlassFish install directoryString home = System.getProperty("WSIT_HOME");// specify the client private key alias from your client// keystoreString client_priv_key_alias="xws-security-client;
참고: SV(Sender-Vouches) SAML 토큰의 subject를 실제 사용자 이름으로 설정하려면
createSVSAMLAssertion()및createSVSAMLAssertion20()메소드를 편집하여 새 생성자SamlCallbackHandler(String 사용자 이름)를 콜백 처리기에 추가해야 한다. 샘플 패키지의 클라이언트 프로젝트에서 이 변경을 볼 수 있다. - 클라이언트의 STS를 위한 웹 서비스 참조를 마우스 오른쪽 버튼으로 클릭한다. Edit Web Service Attributes 옵션을 선택한다. 그런 다음 WSIT Configuration 탭을 선택한다. Username Authentication을 확장하고 Browse... 버튼을 클릭하여 SAML 콜백 처리기 클래스를 가져온다.
실제 사용자의 사용자 이름 및 비밀번호를 가져오려면
- 이미 생성된 클라이언트 프로젝트를 NetBeans에서 연다.
index.jsp페이지를 열고 다음 코드 줄을 추가한다.<form action="FinancialServiceClientServlet" method="POST">username : <input type="text" name="userName">password : <input type="password" name="passWord"><input type="submit" value="Log In"></form>
이 줄을 추가하면 실제 사용자가 유효한 사용자 이름 및 비밀번호를 사용하여 웹 서비스 클라이언트에 로그인할 수 있다. 여기서 클라이언트는 프록시 역할을 한다. 실제 사용자가 웹 서비스 클라이언트에서 성공적으로 검증된 다음 클라이언트는 실제 사용자를 대신하여 STS에서 발급한 토큰을 요청한다. 웹 서비스 클라이언트는 SAML 토큰을 만들며, 이 토큰에서 SAML 논리식의 subject 이름 식별자가 실제 사용자의 로그인 이름으로 채워진다. 그런 다음 STS는 요청 메시지의 SAML 토큰으로부터 실제 사용자의 로그인 이름을 추출하고 발급된 SAML 토큰의 subject를 그 로그인 이름으로 채운다.
샘플 실행
샘플 패키지 실행 지침은 GlassFish Version 2 Release Candidate 1 및 NetBeans 5.5.1 IDE를 기준으로 한다. 여기서는 NetBeans에 WSIT 플러그인을 설치했다고 가정한다. NetBeans에 WSIT 플러그인을 설치하는 것에 대한 자세한 내용은 웹 서비스 상호 운용성 기술: 다운로드 및 설치 방법을 참조한다.
샘플 패키지가 이 팁에 제공된다. 샘플을 설치하고 실행하려면 다음 단계를 수행한다.
- GlassFish Version 2 Release Candidate 1을 아직 아직 설치하지 않았다면 다운로드하여 설치한다.
- XWSS 프로젝트 유틸리티 페이지에서 c
opyv3.zip파일을 다운로드하고 파일의 압축을 푼다. 그리고 다음을 수행한다.
AS_HOME시스템 등록 정보를 GlassFish Version 2 Release Candidate 1을 설치한 위치로 설정한다.
copyv3파일의 압축을 푼 디렉토리로 변경한다. build.xml 파일에서AS_KEYSTORE_PASSWORD등록 정보에 대한 값이 GlassFish 애플리케이션 서버 키 저장소에 대한 올바른 키 저장소 비밀번호인지 확인한다.
- 다음 명령을 입력한다.
ant
그러면 샘플과 함께 사용할 수 있도록 GlassFish 애플리케이션 서버 키 저장소에 샘플 인증서가 복사된다.
- 샘플 패키지를 다운로드하고 압축을 푼다. 이제 새로 압축이 풀린 디렉토리가
<sample_install_dir>/ws-trust-ext와 같이 나타난다. 여기서 <sample_install_dir>은 샘플 패키지를 설치한 디렉토리이다. 예를 들어, Windows 시스템의C:\경로에 해당 컨텐츠의 압축을 풀었다면 새로 생성된 디렉토리는C:\ws-trust-ext이 되어야 한다.
- 압축을 푼 샘플 패키지에 3개의 NetBeans 프로젝트가 있다.
- FinancialService: 서비스 프로젝트
- FinancialServiceSTS: STS 프로젝트
- FinancialServiceClient: 클라이언트 프로젝트
NetBeans 편집기에서 세 프로젝트를 연다.
- FinancialService: 서비스 프로젝트
- 등록된 애플리케이션 서버를 세 프로젝트에 연결한다. 그러려면 프로젝트를 마우스 오른쪽 버튼으로 클릭하고 Properties를 선택한다. 그런 다음 Run을 실행한다. 드롭다운 목록에서 서버를 선택한다.
- keystore 및 truststore의 위치를
<GF_HOME>/domains/domain1/config/keystore.jks및<GF_HOME>/domains/domain1/config/cacerts.jks로 각각 바꾼다. 여기서<GF_HOME>은 GlassFish Version 2 Release Candidate 1을 설치한 위치이다. 서비스, STS 및 클라이언트에 대해 이 작업을 수행한다. 그러려면 각 프로젝트의 웹 서비스 노드에 대해 웹 서비스 속성 편집기에서 WSIT Configuration 탭을 선택한다. 그런 다음 Keystore 및 Truststore의 위치를 애플리케이션 서버 keystore 및 truststore의 절대 경로로 변경한다.
<GF_HOME>/domains/domain1/config/디렉토리의domain.xml파일에 다음 JVM 옵션을 추가한다.<jvm-options>-DWSIT_HOME=${com.sun.aas.installRoot}</jvm-options><jvm-options>-Dcom.sun.xml.ws.transport.http.HttpAdapter.dump=true</jvm-options><jvm-options>-Dcom.sun.xml.ws.transport.http.client.HttpTransportPipe.dump=true</jvm-options>
- 다음 명령을 입력하여 애플리케이션 서버를 시작한다.
<GF_HOME>/bin/asadmin start-domain domain1
- 애플리케이션 서버 사용자를 추가한다. 이 사용자는 STS에 대한 요청 메시지의 사용자 이름 토큰으로 쓰인다. 자세한 내용은 GlassFish에 사용자 추가를 참조한다. 다음 사용자 이름 및 비밀번호로 사용자를 만든다.
username : test
password : test또한 다른 사용자 이름 및 비밀번호를 만들 수도 있다. 그러나 그러기 위해서는 클라이언트 프로젝트의 STS 클라이언트 구성 파일에서 사용자 이름 및 비밀번호를 편집해야 한다.
- 세 프로젝트를 실행한다.
- FinancialService 프로젝트를 마우스 오른쪽 버튼으로 클릭하고 Run Project를 선택한다.
- FinancialServiceSTS 프로젝트를 마우스 오른쪽 버튼으로 클릭하고 Run Project를 선택한다.
- FinancialServiceClient 프로젝트를 마우스 오른쪽 버튼으로 클릭하고 Run Project를 선택한다.
FinancialServiceClient 프로젝트를 마지막에 실행해야 한다.
사용자 이름과 비밀번호로 로그인할 것인지 묻는 JSP 페이지와 함께 브라우저 창이 열린다. 어떤 사용자 이름 및 비밀번호도 입력할 수 있다. 샘플 코드는 실제 사용자를 검증하는 구현을 포함하지 않았다. 이 페이지의 목적은 로그인 페이지에서 실제 사용자의 로그인 ID를 가져와 클라이언트측에서 생성된 SAML 토큰의 subject에 넣는 것이다.
다음과 같은 응답이 나타나야 한다.
Balance = 1,000,000 Acknowledgement = successfully
deposited애플리케이션 서버의 로그 파일에서 메시지 흐름을 볼 수 있다.
"Java SE" 카테고리의 다른 글
- 리스너 리스트를 위한 WEAKHASHMAP 사용하기 (댓글 1개 / 트랙백 0개) 2006/03/08
- J2SE 5.0의 Java 2D API 기능 강화 (댓글 2개 / 트랙백 0개) 2006/05/12
- 3D 화면(scene)에 빛 효과 주기 (댓글 1개 / 트랙백 0개) 2004/07/30
- 다이얼로그 Modality (댓글 1개 / 트랙백 0개) 2006/06/09
- 쿠키 처리 (댓글 22개 / 트랙백 3개) 2007/07/23
- 사용자 데이터그램 프로토콜의 프로그래밍 (댓글 1개 / 트랙백 0개) 2004/06/30
- 락(LOCKS) (댓글 1개 / 트랙백 0개) 2005/09/22
- Java Web Start 퍼시스턴스 (댓글 3개 / 트랙백 0개) 2006/12/24
- AFFINETRANSFORM 이해하기 (댓글 3개 / 트랙백 0개) 2003/09/09
- 사용자 인터페이스에서 Action 사용하기 (댓글 5개 / 트랙백 2개) 2007/02/22
TRACKBACK :: http://blog.sdnkorea.com/blog/trackback/433
-
WSIT에서의 지원 토큰과 발급된 토큰 위임
Tracked from 신욱 삭제WSIT에서의 지원 토큰과 발급된 토큰 위임
2007/09/19 09:57 -
WSIT에서의 지원 토큰과 발급된 토큰 위임
Tracked from ★ dingpong의 조그만 휴식 공간 ★ 삭제WSIT에서의 지원 토큰과 발급된 토큰 위임강좌입니다. 저는 이 내용에 대해서 잘 모르겠네요.ㅠ_ㅠ 너무 어려운 듯? 하핫 열심히 공부 해야 겠습니다.. 많은 도움이 되시길 바랍니다^-^ 원문은 http://www.sdnkorea.com/blog/433이곳에서 볼 수 있습니다.
2007/09/19 22:22
댓글을 달아 주세요
좋은 정보 감사합니다^^
2007/09/14 21:41제가 지금 학원 다니는 초보 입니다.
2007/09/15 07:07글처럼 실해 하는대 얼마나 걸리는 지는 모르지만 열심히 공부 하겟습니다.
감사 합니다.
항상 요긴한 정보로 도움을 많이 받고 있습니다. 자바 신기술 따라잡기에 썬 개발자 네트워크만큼 좋은 곳도 없나봅니다. 언제나 좋은 자료 감사합니다.
2007/09/16 22:42이해하는데 조금 어려웠지만.. 좋은 정보가 되었습니다
2007/09/18 01:26초보라서 그런지 이거 알듯말듯 하네요.
2007/09/18 10:05이게 다 내공의 부족 ㅜ.ㅜ
역시 중급이라서 그런지 어렵네요...ㅠㅠ
2007/09/18 10:07어떻게든 머리속에 집어넣으려고 발버둥 치는데, 한번 읽어서는 이해하기 어렵네요. TT;;;
2007/09/18 13:20한번 봐서는 이해하기 힘들군요. 퍼가서 찬찬히 봐야겠어요.
2007/09/18 19:42역시 많은 공부를 해야겠네요~ ㅎ
2007/09/18 20:09토큰에 대해 더 깊게 알게 되었네요.
2007/09/19 03:04좋은 정보 감사해요~
2007/09/19 03:20좋은자료 많이 많이 올려주세요..감사
2007/09/19 06:38이런것들 공부하려면 엄청난 시간이 들겠죠 ?
2007/09/19 09:51저도 한번 욕심내서 해보고싶지만 시간이 없네요;
Sender-Vouches SAML 논리식하고 WSIT의 WS-Trust 확장 요부분을 팁에서 세심하게 보았습니다.
2007/09/19 11:03휴휴휴 이런 방법이..
2007/09/19 12:37그건 그렇고 정말 영어를 배워야하겠어요.
최신기술을 습득이 원활하려면... ㅠ.ㅠ
우용한 정보 진심으로 감사드립니다.
2007/09/19 14:17여러가지 상황에 따른 코딩이 자세히 설명되어 있어 이해하기가 한결
쉬웠습니다.
관리자만 볼 수 있는 댓글입니다.
2007/09/19 16:07직접적인 개발자가 아니라서 정확한 세부사항까지 이해하기는 어려웠지만 나름 좋은 지식공유가 된것 같아서 기쁘네요... 앞으로도 좋은 지식발견이 되었으면 좋겠습니다. 감사합니다...!
2007/09/19 21:06담아갑니다. 이 내용은 어려워서 제가 이해할 수가 없군요.ㅠ_ㅠ 열심히 공부해야겠습니다~!!
2007/09/19 22:27설명을 정말 잘해주시네요
2007/09/19 22:59어렵지만 많이 배우고 갑니다.