UsernameToken을 사용한 웹 서비스 클라이언트 인증
WebSphere® Application Server Liberty는 OASIS 웹 서비스 보안 UsernameToken 프로파일 1.1 스펙을 지원합니다. 스펙에서는 사용자 이름을 사용하고, 선택사항으로 비밀번호 또는 비밀번호에 해당하는 암호를 사용하여 웹 서비스 제공자에 대해 요청자를 식별하는 수단으로 웹 서비스 클라이언트가 UsernameToken을 제공하는 방법을 설명합니다. 웹 서비스 제공자에 대한 정책을 처리하는 Liberty의 웹 서비스 보안(WS-Security) 런타임은 이 식별 정보를 사용하여 사용자를 인증할 수 있습니다.
UsernameToken의 요구사항은 WS-Security 정책에서 지원되는 토큰 중 하나로 표시되어 있습니다. UsernameToken 요구사항을 SupportingTokens, SignedSupportingTokens, SignedEndorsingSupportingTokens, SignedEncryptedSupportingTokens 및 EncryptedSupportingTokens을 비롯한 지원되는 토큰 어설션 중 하나에 필수 토큰으로 추가할 수 있습니다.
<sp:SupportingTokens>
<wsp:Policy>
<sp:UsernameToken
sp:IncludeToken="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/AlwaysToRecipient">
<wsp:Policy>
<sp:WssUsernameToken11 />
</wsp:Policy>
</sp:UsernameToken>
</wsp:Policy>
</sp:SupportingTokens>
사용자 이름이나 비밀번호를 제공해야 하는 요구사항 외에도 nonce 및 created 시간소인을 UsernameToken에 포함하도록 정책을 구성할 수 있습니다.
<sp:SupportingTokens>
<wsp:Policy>
<sp:UsernameToken
sp:IncludeToken="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/AlwaysToRecipient">
<wsp:Policy>
<sp:WssUsernameToken11 />
<sp13:Created />
<sp13:Nonce />
</wsp:Policy>
</sp:UsernameToken>
</wsp:Policy>
</sp:SupportingTokens>
<sp:SupportingTokens>
<wsp:Policy>
<sp:UsernameToken
sp:IncludeToken="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/AlwaysToRecipient">
<wsp:Policy>
<sp:WssUsernameToken11 />
<sp:HashPassword />
</wsp:Policy>
</sp:UsernameToken>
</wsp:Policy>
</sp:SupportingTokens>
nonce, created, 다른 비밀번호 유형에 대한 자세한 정보는 OASIS WS-Security 정책 1.3 스펙을 참조하십시오.
웹 서비스 클라이언트에서 사용자 이름 및 비밀번호 제공
Liberty의 WS-Security 기능은 UsernameToken을 생성할 때 클라이언트 애플리케이션에 대한 사용자 이름과 비밀번호를 표시하기 위한 두 가지 이상의 방법을 제공합니다. 프로그래밍 방식으로, 또는 server.xml 파일에서 사용자 이름과 비밀번호를 설정할 수 있습니다.
클라이언트는 사용자 이름과 비밀번호가 server.xml 파일에 제공되는 UsernameToken을 생성할 수 있습니다. server.xml 파일에 있는 사용자 이름과 비밀번호는 기본 구성으로 고려되고 클라이언트의 웹 서비스 호출에 대한 RequestContext에 제공된 것으로 대체됩니다.
<wsSecurityClient id="default"
ws-security.username="alice"
ws-security.callback-handler="com.acme.PasswordCallback"
</wsSecurityClient>
- ws-security.username - 사용자 이름
- ws-security.password - ws-security.callback-handler이 정의되지 않은 경우 사용자 비밀번호
- ws-security.callback-handler - 비밀번호를 확보하기 위해 사용되는 CallbackHandler 구현 클래스
Map<String, Object> requestCtx = ((BindingProvider)port).getRequestContext();
requestCtx.put("ws-security.username", "bob_username");
requestCtx.put("ws-security.password", "bob_password");
웹 서비스 제공자에서 UsernameToken 이용
UsernameToken을 수신할 때 WS-Security는 자동으로 Liberty 보안 사용자 레지스트리를 사용하여 사용자 이름 및 비밀번호의 유효성을 검증합니다(비밀번호가 필수인 경우). UsernameToken의 비밀번호 유형이 PasswordDigest이거나 파생된 키를 사용 중인 경우, server.xml 파일에서 ws-security.callback-handler를 구성하여 비밀번호 콜백 핸들러의 해당 구현을 제공해야 합니다. 이 콜백 핸들러는 SOAP 메시지의 값과의 비교를 위해 WS-Security 런타임에서 요약 값을 계산할 수 있도록 예상되는 모든 사용자 이름에 대해 올바른 비밀번호를 리턴해야 합니다. 요약 값 비교가 완료되면, 사용자 이름 및 비밀번호는 사용자 레지스트리에 대해 유효성이 검증됩니다.
<wsSecurityProvider id="default"
ws-security.callback-handler="com.acme.PasswordCallback"
</wsSecurityProvider>
비밀번호 CallbackHandler
비밀번호 CallbackHandler는 사용자 비밀번호를 검색하기 위해 WS-Security에서 사용됩니다. Liberty에서, 이 비밀번호 CallbackHandler 클래스는 Liberty 기능으로 패키징되어야 합니다. 비밀번호 CallbackHandler에 대한 자세한 정보는 WS-Security에 대한 비밀번호 콜백 핸들러 개발을 참조하십시오.
콜백 핸들러 구현의 요구사항 및 제한사항에 대한 자세한 정보는 X.509 토큰을 사용하여 웹 서비스 보호의 개인 키 비밀번호 CallbackHandler 절을 참조하십시오.
SOAP 메시지에서 UsernameToken 보호
<UsernameToken>
<Username>myusername</Username>
<Password
Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">
mypassword
</Password>
</UsernameToken>
PasswordText와 함께 UsernameToken을 발송하려는 경우 메시지에 대해 추가 보호를 고려하십시오(예: EncryptedSupportingToken 정책 어설션을 사용하여 토큰을 암호화하거나 HTTPS 사용). 정책에서의 HTTP 전송 사용 요구에 대한 자세한 정보는 Liberty: 웹 서비스 보안 HTTP 전송 정책 어설션를 참조하십시오.
UsernameToken 키 파생
웹 서비스 보안 UsernameToken 프로파일 1.1 스펙에 언급된 대로:
사용자 이름과 연관된 비밀번호는 메시지 콘텐츠를 보호하여 무결성 또는 기밀성을 위해 공유된 비밀 키를 파생시키는데 사용될 수 있습니다.
비밀번호는 몇 가지 공격의 대상이 되어, 파생된 키가 노출된다는 점에 유의하십시오. 이 키 파생 프로시저는 가능한 범위까지 키에 대한 공격의 위험성을 최소화하려고 하지만, 사용자가 기억할 수 있고 표준 키보드에서 입력할 수 있는 비밀번호의 비밀번호의 불안정에 의해 제한됩니다.
비밀번호에서 키를 파생하기 위해 두 개의 추가 요소가 필요합니다. <wsse11:Salt>와 <wsse11:Iteration>입니다. 이 값은 비밀이 아니므로 키 파생이 사용될 때 Username 토큰으로 전달해야 합니다. 키 파생이 사용되는 경우 Username 토큰에 비밀번호가 포함되면 안됩니다. 수신인은 발신인과 같은 키를 파생시키기 위해 비밀번호에 대한 지식을 사용할 것입니다.
UsernameToken이 키 파생을 사용 중인 경우, 제공자 애플리케이션에는 server.xml 파일에서 ws-security.callback-handler를 구성하여 비밀번호 콜백 핸들러의 해당 구현을 제공해야 합니다.
<sp:SymmetricBinding>
<wsp:Policy>
<sp:ProtectionToken>
<wsp:Policy>
<sp:UsernameToken
sp:IncludeToken="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/AlwaysToRecipient">
<wsp:Policy>
<sp:WssUsernameToken10 />
<sp:RequireDerivedKeys />
</wsp:Policy>
</sp:UsernameToken>
<wsp:Policy>
</sp:ProtectionToken>
</wsp:Policy>
</sp:SymmetricBinding>
<wsse:UsernameToken wsse:Id="...">
<wsse:Username>...</wsse:Username>
<wsse11:Salt>...</wsse11:Salt>
<wsse11:Iteration>...</wsse11:Iteration>
</wsse:UsernameToken>