7.3. 클라이언트 인증 정보 제공


7.3.1. 개요

기본적으로 UsernameToken 클라이언트 자격 증명을 제공하는 두 가지 방법이 있습니다. 클라이언트의 블루프린트 XML 구성에서 사용자 이름과 암호를 직접 설정하거나 클라이언트 구성에서 사용자 이름을 설정하고 콜백 핸들러를 구현하여 암호를 프로그래밍 방식으로 제공할 수 있습니다. 후자의 접근 방식은 (프로그래밍에 의한) 암호는 보기에서 더 쉽게 숨길 수 있다는 장점이 있습니다.

7.3.2. 클라이언트 인증 정보 속성

표 7.1. “클라이언트 인증 정보 속성” 블루프린트 XML에서 클라이언트의 요청 컨텍스트에 대한 WS-Security 사용자 이름/암호 자격 증명을 지정하는 데 사용할 수 있는 속성이 표시됩니다.

표 7.1. 클라이언트 인증 정보 속성
속성설명

security.username

UsernameToken 정책 어설션의 사용자 이름을 지정합니다.

security.password

UsernameToken 정책 어설션의 암호를 지정합니다. 지정하지 않으면 콜백 처리기를 호출하여 암호를 가져옵니다.

security.callback-handler

UsernameToken 정책 어설션의 암호를 검색하는 WSS4J 콜백 처리기의 클래스 이름을 지정합니다. 콜백 처리기는 다른 종류의 보안 이벤트도 처리할 수 있습니다.

7.3.3. 블루프린트 XML에서 클라이언트 인증 정보 구성

블루프린트 XML에서 클라이언트의 요청 컨텍스트에서 사용자 이름/암호 자격 증명을 구성하려면 다음과 같이 security.usernamesecurity.password 속성을 설정합니다.

<beans ... >
    <jaxws:client name="{NamespaceName}LocalPortName"
                  createdFromAPI="true">
        <jaxws:properties>
            <entry key="security.username" value="Alice"/>
            <entry key="security.password" value="abcd!1234"/>
        </jaxws:properties>
    </jaxws:client>
    ...
</beans>

암호를 블루프린트 XML(보안 위험일 수 있음)에 직접 저장하지 않으려면 대신 콜백 처리기를 사용하여 암호를 제공할 수 있습니다.

7.3.4. 암호를 위한 콜백 처리기 프로그래밍

콜백 처리기를 사용하여 UsernameToken 헤더에 대한 암호를 제공하려면 먼저 블루프린트 XML의 클라이언트 구성을 수정하여 security.password 설정을 security.callback-handler 설정으로 교체해야 합니다.

<beans ... >
    <jaxws:client name="{NamespaceName}LocalPortName"
                  createdFromAPI="true">
        <jaxws:properties>
            <entry key="security.username" value="Alice"/>
            <entry key="security.callback-handler" value="interop.client.UTPasswordCallback"/>
        </jaxws:properties>
    </jaxws:client>
    ...
</beans>

앞의 예에서 콜백 처리기는 UTPasswordCallback 클래스에 의해 구현됩니다. 예 7.2. “UsernameToken 암호에 대한 콜백 처리기” 에 표시된 대로 javax.security.auth.callback.CallbackHandler 인터페이스를 구현하여 콜백 처리기를 작성할 수 있습니다.

예 7.2. UsernameToken 암호에 대한 콜백 처리기

package interop.client;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

import javax.security.auth.callback.Callback;
import javax.security.auth.callback.CallbackHandler;
import javax.security.auth.callback.UnsupportedCallbackException;

import org.apache.ws.security.WSPasswordCallback;

public class UTPasswordCallback implements CallbackHandler {

    private Map<String, String> passwords =
        new HashMap<String, String>();

    public UTPasswordCallback() {
        passwords.put("Alice", "ecilA");
        passwords.put("Frank", "invalid-password");
        //for MS clients
        passwords.put("abcd", "dcba");
    }

    public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException {
        for (int i = 0; i < callbacks.length; i++) {
            WSPasswordCallback pc = (WSPasswordCallback)callbacks[i];

            String pass = passwords.get(pc.getIdentifier());
            if (pass != null) {
                pc.setPassword(pass);
                return;
            }
        }

        throw new IOException();
    }

    // Add an alias/password pair to the callback mechanism.
    public void setAliasPassword(String alias, String password) {
        passwords.put(alias, password);
    }
}

콜백 기능은 CallbackHandler.handle() 메서드로 구현됩니다. 이 예제에서는 handle() 메서드로 전달된 콜백 오브젝트가 모두 org.apache.ws.security.WSPasswordCallback 유형이라고 가정합니다(더 직관적인 예에서 콜백 오브젝트 유형을 확인합니다).

클라이언트 콜백 처리기의 보다 비현실적인 구현은 사용자에게 암호를 입력하라는 메시지를 표시하는 것으로 구성될 수 있습니다.

7.3.5. WSPasswordCallback 클래스

UsernameToken 암호를 설정하기 위해 Apache CXF 클라이언트에서 콜백 처리기 를 호출하면 해당 WSPasswordCallback 오브젝트에 USERNAME_TOKEN 사용 코드가 있습니다.

WSPasswordCallback 클래스에 대한 자세한 내용은 org.apache.ws.security.WSPasswordCallback 을 참조하십시오.

WSPasswordCallback 클래스는 다음과 같이 여러 가지 사용 코드를 정의합니다.

USERNAME_TOKEN

UsernameToken 자격 증명의 암호를 가져옵니다. 이 사용 코드는 클라이언트 측과(서버로 전송할 암호를 얻기 위해) 및 서버 측에서 사용됩니다(클라이언트로부터 수신된 암호와 비교하기 위해 암호를 받기 위해).

서버 측에서 이 코드는 다음과 같은 경우에 설정됩니다.

  • 다이제스트 암호- UsernameToken에 다이제스트 암호가 포함된 경우 콜백은 지정된 사용자 이름( WSPasswordCallback.getIdentifier())에 대한 해당 암호를 반환해야 합니다. 암호 확인( 다이제스트 암호와 비교하여)은 WSS4J 런타임을 통해 수행됩니다.
  • 일반 텍스트 암호- 다이제스트 암호 케이스 (Apache CXF 2.4.0)와 동일한 방식으로 구현되었습니다.
  • 사용자 정의 암호 유형-if getHandleCustomPasswordTypes()org.apache.ws.security.WSSConfig 에서 true 인 경우 다이제스트 암호 케이스와 동일한 방식으로 구현됩니다(Apache CXF 2.4.0). 그렇지 않으면 예외가 발생합니다.

    서버 측의 수신된 UsernameToken에 Password 요소가 포함되어 있지 않은 경우 콜백 처리기는 호출되지 않습니다(Apache CXF 2.4.0).

DECRYPT
Java 키 저장소에서 개인 키를 검색하려면 암호가 필요합니다. 여기서 WSPasswordCallback.getIdentifier() 는 키 저장소 항목의 별칭을 제공합니다. WSS4J는 이 개인 키를 사용하여 세션(symmetric) 키의 암호를 해독합니다.
서명
Java 키 저장소에서 개인 키를 검색하려면 암호가 필요합니다. 여기서 WSPasswordCallback.getIdentifier() 는 키 저장소 항목의 별칭을 제공합니다. WSS4J는 이 개인 키를 사용하여 서명을 생성합니다.
SECRET_KEY
아웃바운드 측에서 암호화 또는 서명에 대한 비밀 키 또는 인바운드 측의 암호 해독 또는 확인이 필요합니다. 콜백 처리기는 setKey(byte[]) 메서드를 사용하여 키를 설정해야 합니다.
SECURITY_CONTEXT_TOKEN
setKey(byte[]) 메서드를 호출하여 제공하는 wsc:SecurityContextToken 의 키가 필요합니다.
CUSTOM_TOKEN
token을 보유해야 하는 요소(element)입니다. 예를 들어 메시지에 없는 SAML Assertion 또는 SecurityContextToken에 대한 참조의 경우에 사용됩니다. 콜백 처리기는 setCustomToken( Cryostat) 메서드를 사용하여 토큰을 설정해야 합니다.
KEY_NAME
Apache CXF 2.4.0부터 이 사용 코드는 더 이상 사용되지 않습니다.
USERNAME_TOKEN_UNKNOWN
Apache CXF 2.4.0부터 이 사용 코드는 더 이상 사용되지 않습니다.
알 수 없음
WSS4J에서는 사용하지 않습니다.
Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

© 2024 Red Hat, Inc.