WSS API를 사용하여 대칭 키를 포함하는 자체 발행 SAML HoK(holder-of-key) 토큰 전송

HoK(holder-of-key) 주제 확인 메소드를 포함한 자체 발행 SAML 토큰을 작성한 다음 JAX-WS(Java™ API for XML-Based Web Services) 프로그래밍 모델 및 WSS API(Web Services Security API)를 사용하여 웹 서비스 요청 메시지와 함께 해당 토큰을 전송할 수 있습니다.

시작하기 전에

이 태스크에서는 사용자가 JAX-WS 프로그래밍 모델, WSS API 인터페이스, SAML 개념 및 웹 서비스 설정을 구성하고 관리하기 위한 정책 세트 사용에 익숙한 것으로 가정합니다. 이 태스크를 시작하기 전에 다음 조치를 완료하십시오.
  • WSS API를 사용한 자체 발행 SAML 전달자 토큰 전송에 대해 읽어 보십시오.
  • 메시지 레벨 보호와 함께 WSS API를 사용한 자체 발행 SAML 전송자 인증 토큰 전송에 대해 읽어 보십시오.

이 태스크 정보

이 태스크는 HoK(holder-of-key) 주제 확인 메소드 보안 요구사항을 충족시키기 위해 선택한 SOAP 메시지의 디지털 서명을 생성하는 SAML 보안 토큰에 임베드되는 대칭 키의 사용에 초점을 맞춥니다. 웹 서비스 제공자에게 첨부되는 웹 서비스 보안 정책은 WebSphere® Application Server 7.0.0.7 이상 릴리스에서 제공되는 SAML20 HoK Symmetric WSSecurity default 정책 세트의 웹 서비스 보안 정책입니다.

프로시저

  1. HoK(holder-of-key) 주제 확인 메소드를 포함하는 SAML 보안 토큰을 작성하십시오. 예를 들면, 다음과 같습니다.
    WSSFactory factory = WSSFactory.getInstance();
    // Initialize WSSGenerationContext
    com.ibm.websphere.wssecurity.wssapi.WSSGenerationContext gencont = factory.newWSSGenerationContext();
    // Initialize SAML issuer configuration via custom properties
    HashMap<Object, Object> customProps = new HashMap<Object,Object>();
    
    customProps.put(SamlConstants.ISSUER_URI_PROP, "example.com");
    customProps.put(SamlConstants.TTL_PROP, "3600000");
    customProps.put(SamlConstants.KS_PATH_PROP, "keystores/saml-provider.jceks");
    customProps.put(SamlConstants.KS_TYPE_PROP, "JCEKS");
    customProps.put(SamlConstants.KS_PW_PROP, "{xor}LCswLTovPiws");
    customProps.put(SamlConstants.KEY_ALIAS_PROP, "samlissuer");
    customProps.put(SamlConstants.KEY_NAME_PROP, "CN=SAMLIssuer, O=EXAMPLE");
    customProps.put(SamlConstants.KEY_PW_PROP, "{xor}NDomLz4sLA==");
    customProps.put(SamlConstants.TS_PATH_PROP, "keystores/saml-provider.jceks");
    customProps.put(SamlConstants.TS_TYPE_PROP, "JCEKS");
    customProps.put(SamlConstants.TS_PW_PROP, "{xor}LCswLTovPiws"); 
    gencont.add(customProps); //Add custom properties
    HashMap<Object, Object> map = new HashMap<Object, Object>();
    map.put(SamlConstants.CONFIRMATION_METHOD, "holder-of-key");
    map.put(SamlConstants.Token_REQUEST, "issue");
    map.put(SamlConstants.TOKEN_TYPE, WSSConstants.SAML.SAML20_VALUE_TYPE);
    map.put(SamlConstants.SAML_NAME_IDENTIFIER, "Alice");
    map.put(SamlConstants.SIGNATURE_REQUIRED, "true");
    map.put(SamlConstants.SERVICE_ALIAS, "soaprecipient");
    map.put(SamlConstants.KEY_TYPE, 
            "http://docs.oasis-open.org/ws-sx/ws-trust/200512/SymmetricKey");
    map.put(SamlConstants.SAML_APPLIES_TO, "http://localhost:9080/your_Web_service");
    map.put(RequesterConfiguration.RSTT.ENCRYPTIONALGORITHM,
            "http://www.w3.org/2001/04/xmlenc#aes256-cbc");
    map.put(SamlConstants.KEY_SIZE, "256");
    SAMLGenerateCallbackHandler callbackHandler = new 
            SAMLGenerateCallbackHandler(map); 
    SAMLToken samlToken = (SAMLToken) factory.newSecurityToken(SAMLToken.class,
            callbackHandler, "system.wss.generate.saml");

    SAML 보안 토큰에 임베드된 증명 키가 대상 웹 서비스에 대해 암호화됩니다. 증명 키를 암호화하는 대상 서비스의 공개 키는 신뢰 파일에서 공개 인증서를 지정하는 SamlConstants.SERVICE_ALIAS 특성에 의해 지정됩니다. 신뢰 파일 위치는 com.ibm.websphere.wssecurity.wssapi.WSSGenerationContext 사용자 정의 특성에 의해 지정됩니다. 이 예에서는 암호화에 256비트 키 크기가 사용되기 때문에 JCE(Java Cryptography Extension) 정책 파일을 가져와야 합니다. 자세한 정보는 "웹 서비스 보안 애플리케이션 조정" 주제에서 무제한 JCE 정책 파일 사용에 대해 읽어 보십시오.

    디지털 서명 및 암호화에 대칭 키를 직접 사용하는 대신 파생된 키를 사용하려는 경우 다음 이름-값 쌍을 추가하십시오.

    map.put(SamlConstants.REQUIRE_DKT, "true");
  2. WSSGenerationContext 오브젝트를 사용하여 요청 메시지 보안 헤더 처리를 준비하십시오. 예를 들면, 다음과 같습니다.
    gencon.add(samlToken); //this line of code can be omitted
    
    WSSTimestamp timestamp = factory.newWSSTimestamp();
    gencon.add(timestamp);
    
    WSSSignature sig = factory.newWSSSignature(samlToken);
    
    sig.setSignatureMethod(WSSSignature.HMAC_SHA1);
    sig.setCanonicalizationMethod(WSSSignature.EXC_C14N);
    sig.addSignPart(WSSSignature.BODY);
    sig.addSignPart(WSSSignature.TIMESTAMP);
    sig.addSignPart(WSSSignature.ADDRESSING_HEADERS);
    sig.setTokenReference(SecurityToken.REF_KEYID);
    //If the gencon.add(samlToken); line of code is omitted, or DerivedKey is used
    //the above line of code must be replaced with
    //sig.setTokenReference(SecurityToken.REF_STR);
    
    gencon.add(sig);
    
    WSSEncryption enc = factory.newWSSEncryption(samlToken); 
    
    enc.setEncryptionMethod(WSSEncryption.AES256);
    enc.setTokenReference(SecurityToken.REF_KEYID);
    //If the gencon.add(samlToken); line of code is omitted, or DerivedKey is used
    //the above line of code must be replaced with
    //enc.setTokenReference(SecurityToken.REF_STR);
    enc.encryptKey(false);
    enc.addEncryptPart(WSSEncryption.BODY_CONTENT);
    enc.addEncryptPart(WSSEncryption.SIGNATURE);
    gencon.add(enc);
  3. WSSConsumingContext 오브젝트를 작성하여 응답 메시지 보안 헤더 처리를 준비하십시오. 예를 들면, 다음과 같습니다.
    WSSConsumingContext concont = factory.newWSSConsumingContext();
    
    HashMap<Object, Object> map = new HashMap<Object, Object>();
    
    SAMLConsumerCallbackHandler callbackHandler = new
            SAMLConsumerCallbackHandler(map); 
    
    WSSDecryption dec = factory.newWSSDecryption(SAMLToken.class, callbackHandler,
            "system.wss.consume.saml");
    dec.addAllowedEncryptionMethod(WSSDecryption.AES256);
    dec.encryptKey(false);
    dec.addRequiredDecryptPart(WSSDecryption.BODY_CONTENT); 
    
    concont.add(dec);
    
    callbackHandler = new SAMLConsumerCallbackHandler(map);
    WSSVerification ver = factory.newWSSVerification(SAMLToken.class, callbackHandler,
            "system.wss.consume.saml");
    ver.addAllowedSignatureMethod(WSSVerification.HMAC_SHA1);
    ver.addRequiredVerifyPart(WSSVerification.BODY);
    ver.addRequiredVerifyPart(WSSVerification.TIMESTAMP);
    
    concont.add(ver);
  4. JDK keytool 유틸리티를 사용하여 코드 예를 테스트하는 데 사용되는 saml-provider.jceksrecipient.jceks 파일을 생성하십시오. 예를 들면, 다음과 같습니다.
    keytool -genkey -alias samlissuer -keystore saml-provider.jceks -dname "CN=SAMLIssuer, O=ACME" -storepass issuerstorepass
     -keypass issuerkeypass -storetype jceks -validity 5000 -keyalg RSA -keysize 2048
    
    keytool -genkey -alias soaprecipient -keystore recipient.jceks -dname "CN=SOAPRecipient, O=ACME" -storepass reciptstorepass
     -keypass reciptkeypass -storetype jceks -validity 5000 -keyalg RSA -keysize 2048
    
    keytool -export -alias soaprecipient -file reciptpub.cer -keystore recipient.jceks -storepass reciptstorepass -storetype jceks
    
    keytool -import -alias soaprecipient -file reciptpub.cer -keystore saml-provider.jceks -storepass issuerstorepass -storetype jceks
     -keypass issuerkeypass -noprompt

결과

SOAP 메시지로 SAML 보안 토큰을 전송하고 메시지 레벨 보호의 SAML 보안에서 임베드되는 대칭 키를 사용하는 웹 서비스 클라이언트 애플리케이션을 작성하기 위한 핵심 블록 빌드를 학습했습니다.


주제 유형을 표시하는 아이콘 태스크 주제



시간소인 아이콘 마지막 업데이트 날짜: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=twbs_configsamlhok_symmetric_usingwssapi
파일 이름:twbs_configsamlhok_symmetric_usingwssapi.html