API를 사용하여 HoK(holder-of-key) 토큰 작성

SAML HoK(holder-of-key) 토큰은 WebSphere® Application Server에서 보안 토큰 공용 인터페이스를 확장하고 보호 토큰으로 사용할 수 있습니다. WebSphere Application Server는 SAML HoK(holder-of-key) 토큰 작성을 위해 SAML 라이브러리 API를 제공합니다.

이 태스크 정보

SAML 토큰 작성에는 다음 세 가지 매개변수가 필요합니다.
  • com.ibm.wsspi.wssecurity.saml.config.RequesterConfig
  • com.ibm.wsspi.wssecurity.saml.config.ProviderConfig
  • com.ibm.wsspi.wssecurity.saml.config.CredentialConfig
각 매개변수에 대한 인터페이스를 작성한 다음 SAML HoK(holder-of-key) 토큰을 작성하는 단계를 따르십시오. CredentialConfig에 대한 대체로 javax.security.auth.Subject를 사용할 수도 있습니다. 자세한 정보는 API 문서를 참조하십시오.

프로시저

  1. SAML 토큰 버전을 매개변수로 사용하여 SAMLTokenFactory 인스턴스를 작성하십시오. 지원되는 SAMLToken 버전은 http://docs.oasis-open.org/wss/oasis-wss-saml-token-profile-1.1#SAMLV1.1 및 http://docs.oasis-open.org/wss/oasis-wss-saml-token-profile-1.1#SAMLV2.0입니다. SAMLTokenFactory 인스턴스는 싱글톤이기 때문에 스레드 세이프(thread-safe)입니다. 토큰 버전에 따라 이러한 코드 행 중 하나를 사용하여 인스턴스를 작성하십시오.
    • 버전 1.1 SAML 토큰에 대해 com.ibm.websphere.wssecurity.wssapi.token.SAMLTokenFactory 인스턴스를 작성하려면 다음 코드 행을 사용하십시오.
      SAMLTokenFactory samlFactory = SAMLTokenFactory.getInstance(SAMLTokenFactory.WssSamlV11Token11);
    • 버전 2.0 SAML 토큰에 대해 com.ibm.websphere.wssecurity.wssapi.token.SAMLTokenFactory 인스턴스를 작성하려면 다음 코드 행을 사용하십시오.
      SAMLTokenFactory samlFactory = SAMLTokenFactory.getInstance(SAMLTokenFactory.WssSamlV11Token20);
  2. SAMLTokenFactory 인스턴스는 요청자의 인증 요구사항에 따라 토큰이 생성되는 방식을 판별하는 RequesterConfig 인스턴스를 작성하는 데 사용됩니다. 토큰이 비밀 키(대칭 키)를 사용하게 할지 또는 공개 키를 사용하게 할지에 따라 이러한 코드 행 중 하나를 사용하여 RequesterConfig 인스턴스를 작성하십시오.
    • 다음 코드 행을 사용하여 SubjectConfirmation에 포함된 비밀 키(대칭 키)를 사용하는 SAML HoK(holder-of-key) 토큰의 기본 RequesterConfig를 작성하십시오.
      RequesterConfig reqData = samlFactory. newSymmetricHolderOfKeyTokenGenerateConfig ();
      대상 서비스에 대해 키 별명도 설정하여 제공자가 서비스에 대한 비밀 키를 암호화할 수 있도록 해야 합니다.
      reqData.setKeyAliasForAppliesTo("SoapRecipient");
    • 다음 코드 행을 사용하여 SubjectConfirmation에 포함된 공개 키를 사용하는 SAML HoK(holder-of-key) 토큰의 기본 RequesterConfig를 작성하십시오.
      RequesterConfig reqData = samlFactory. newAsymmetricHolderOfKeyTokenGenerateConfig ();
      요청자에 대한 키 별명도 설정하여 제공자가 요청자로부터 공개 키를 추출하고 이 키를 SubjectConfirmation에 포함시킬 수 있도록 해야 합니다.
      reqData.setKeyAliasForRequester(“SOAP Initiator”);
    기본 RequestConfig 인스턴스는 단순 HoK(holder-of-key) 토큰을 생성하는 데에는 충분하지만 RequesterConfig 인스턴스를 사용자 정의하여 추가 어설션을 SAML 토큰에 포함시킬 수 있습니다. 예를 들어, 비밀번호 인증 정보를 토큰에 포함시키려면 setAuthenticationMethod를 사용하십시오.
    reqData.setAuthenticationMethod(“password”);
  3. SAMLTokenFactory를 사용하여 토큰 발행자를 설명하는 ProviderConfig 인스턴스를 작성하십시오. ProviderConfig 인스턴스는 SAML 암호화 및 서명의 키를 식별하는 키 저장소 및 신뢰 저장소 정보 외에도 SAML 발행자 이름을 지정합니다. ProviderConfig 인스턴스는 특성 파일의 특성 값을 사용하여 작성됩니다. 특성 파일은 ProviderConfig 오브젝트의 기본값을 지정합니다. Java™ 클라이언트 환경에서 이 특성 파일은 JVM 시스템 특성 com.ibm.webservices.wssecurity.platform.SAMLIssuerConfigDataPath에 의해 정의됩니다.
    WebSphere Application Server 런타임 환경에서 특성 파일 이름은 SAMLIssuerConfig.properties입니다. 이 파일은 해당 우선순위 순으로 서버 레벨 구성 디렉토리 또는 셀 레벨 디렉토리에 있을 수 있습니다. 서버 레벨 경로의 예는 다음과 같습니다.
    app_server_root/profiles/$PROFILE/config/cells/$CELLNAME/nodes/$NODENAME/servers/$SERVERNAME/SAMLIssuerConfig.properties
    셀 레벨 경로의 예는 다음과 같습니다.
    app_server_root/profiles/$PROFILE/config/cells/$CELLNAME/sts/SAMLIssuerConfig.properties

    특성이 서버 런타임 환경에서 정의되는 경우에 JVM 시스템 특성 com.ibm.webservices.wssecurity.platform.SAMLIssuerConfigDataPath는 무시됩니다. 모든 특성의 세부 설명은 토큰 작성 중 SAML 토큰의 구성에 대해 읽어 보십시오.

    다음 코드 행을 사용하여 기본 ProviderConfig 인스턴스를 작성하십시오.

    ProviderConfig samlIssuerCfg = samlFactory.newDefaultProviderConfig(“any issuer name”);
    발행자 이름은 선택적입니다. 발행자 이름이 지정되는 경우 발행자 이름이 SAML 어설션에 표시됩니다. 발행자 이름이 지정되지 않은 경우 SAMLIssuerConfig.properties의 기본 발행자 이름 특성이 발행자 이름으로 사용됩니다.
  4. 옵션: 새 SAML 토큰을 작성할 때 SAMLTokenFactory는 JAAS 주제 또는 CredentialConfig 인스턴스를 사용하여 새 SAML 토큰을 채웁니다. JAAS 주제를 사용하여 토큰을 채우려면 com.ibm.websphere.security.auth.WSSubject getCallerSubject() API 또는 getRunAsSubject() API를 사용하여 요청 클라이언트 또는 실행 스레드의 ID를 나타내는 JAAS 주제를 얻으십시오.

    JAAS 주제를 사용하여 새 SAML 토큰을 작성할 때 SAMLTokenFactory는 주제 PrivateCredentials 목록에서 SAMLToken 오브젝트를 검색합니다. SAMLToken 오브젝트가 존재하는 경우 NameId 또는 NameIdentifier가 새 SAML 토큰에 복사됩니다. SAMLTokenFactory도 기존 SAML 토큰의 SAML 속성 및 AuthenticationMethod를 새 SAML 토큰에 복사합니다. 새 SAML 토큰은 새 발행자 이름, 새 서명 인증서, 확인 메소드, HoK(holder-of-key) 확인 메소드의 새 키 정보 및 새 NotBefore 및 NotOnAfter 조건을 포함합니다. 이러한 토큰 설정은 ProviderConfig 및 RequesterConfig 오브젝트의 구성 매개변수에 의해 판별됩니다.

    주제에 SAMLToken 오브젝트가 없는 경우 WSPrincipal 프린시펄 이름이 주제에서 새 SAML 토큰으로 복사됩니다. 주제의 다른 속성은 새 SAML 토큰에 복사되지 않습니다. 마찬가지로 발행자 이름, 서명 인증서, 확인 메소드, HoK(holder-of-key)의 키 정보 및 NotBefore와 NotOnOrAfter 조건은 ProviderConfig 및 RequesterConfig 오브젝트의 구성 매개변수에 의해 판별됩니다.

    또는 실행 스레드에서 RunAsSubject 메소드를 사용하여 SAML 토큰을 작성할 수 있습니다. 이 메소드를 사용할 때 SAML 토큰을 작성하기 위해 JAAS 주제 또는 CredentialConfig 오브젝트를 SAMLTokenFactory에 전달하지 마십시오. 대신 앞서 설명한 대로 기존 SAML 토큰의 컨텐츠가 새 SAML 토큰에 복사됩니다.

    SAML 토큰을 작성하는 또 다른 방법은 CredentialConfig 오브젝트를 사용하여 SAML NameId 및 속성을 프로그래밍 방식으로 채우는 것입니다. 다음 환경에서 이 메소드를 사용하십시오.
    • 사용자 정의 SAML 속성이 새 SAML 토큰에 포함되어야 합니다.
    • SAMLTokenFactory를 사용하여 JAAS 주제로부터 SAML 토큰을 자동으로 채우는 대신 SAML 토큰을 수동으로 작성합니다.
    • 주제에 기존 SAML 토큰이 없습니다.
    • 사용 가능한 JAAS 주제가 없습니다.

    JAAS 주제를 사용하지 않고 CredentialConfig 오브젝트를 작성하려면 다음 코드 행을 사용하십시오.

    CredentialConfig cred = samlFactory.newCredentialConfig ();
    이 CredentialConfig 오브젝트에 대해 제공되는 초기값이 없으므로 Setter 메소드를 사용하여 CredentialConfig 오브젝트를 채워야 합니다.
    SAML NameIdentifier 또는 NameID를 채우려면 다음 코드 행을 사용하십시오.
    cred.setRequesterNameID("any name");
    any name 변수의 값은 SAML 토큰에서 프린시펄 이름으로 사용됩니다. 이 이름은 SAML 버전 1.1 토큰에서는 NameIdentifier로, SAML 버전 2.0 토큰에서는 NameId로 어설션에 표시됩니다. 예를 들어, any name의 값이 Alice인 경우 SAML 버전 1.1 토큰에서 다음 어설션이 생성됩니다.
    <saml:NameIdentifier>Alice</saml:NameIdentifier>
    다음 어설션은 SAML 버전 2.0 토큰에서 생성됩니다.
    <saml2:NameID>Alice</saml2:NameID> 

    어설션의 <AttributeStatement> 부분에 SAML 속성을 포함하려면 다음 코드를 사용하십시오.

    SAMLAttribute samlAttribute = new SAMLAttribute("email" /* Name*/, new String[] {"joe@websphere"} 
    /*Attribute Values*/, null, "IBM WebSphere namespace" /* namespace*/, "email" /* format*/, "joe" /*friendly name */);
    ArrayList<SAMLAttribute> al = new ArrayList<SAMLAttribute>();
    al.add(samlAttribute)
    sattribute = new SAMLAttribute("Membership", new String[] {"Super users", "Gold membership"}, null, null /* format*/, null, null );
    al.add(samlAttribute );
    cred.setSAMLAttributes(al);
    이 샘플 코드는 다음 <Attribute> 어설션을 생성합니다.
    <saml:Attribute AttributeName="email" NameFormat="email" AttributeNamespace="IBM WebSphere namespace">
    <saml:AttributeValue>joe@websphere</saml:AttributeValue>
    </saml:Attribute>
    <saml:Attribute AttributeName="Membership">
    <saml:AttributeValue>Super users</saml:AttributeValue><saml:AttributeValue>Gold membership</saml:AttributeValue>
    </saml:Attribute>
  5. 다음 코드 행을 사용하여 SAML HoK(holder-of-key) 토큰을 생성하십시오.
    SAMLToken samlToken = samlFactory.newSAMLToken(cred, reqData, samlIssuerCfg);
    이 메소드는 Java 보안 권한 wssapi.SAMLTokenFactory.newSAMLToken을 요구합니다. 전 단계의 코드 행을 사용하는 완전한 코드 샘플이 예제 섹션에 포함되어 있습니다.

다음 샘플 코드를 사용하여 주제에서 비밀 키(대칭 키)를 사용하는 SAML 버전 1.1 HoK(holder-of-key) 토큰을 작성하십시오.
import com.ibm.wsspi.wssecurity.saml.config.RequesterConfig;
import com.ibm.wsspi.wssecurity.saml.config.ProviderConfig;
import com.ibm.wsspi.wssecurity.saml.config.CredentialConfoig ; 
import com.ibm.websphere.wssecurity.wssapi.token.SAMLTokenFactory 

SAMLTokenFactory samlFactory =  SAMLTokenFactory.getInstance(SAMLTokenFactory.WssSamlV11Token11);

RequesterConfig reqData  =  samlFactory.newSymmetricHolderOfKeyTokenGenerateConfig();

//Map "AppliesTo" to key alias, so library knows how to encrypt the Symmetric Key
reqData.setKeyAliasForAppliesTo("SOAPRecipient"); 

ProviderConfig samlIssuerCfg = samlFactory.newDefaultProviderConfig(IsserUri);

Subject subject =  com.ibm.websphere.security.auth.WSSubject.getRunAsSubject(); 

SAMLToken samlToken =  samlFactory.newSAMLToken(subject, reqData, samlIssuerCfg);
다음 샘플 코드를 사용하여 주제에서 공개 키를 사용하는 SAML 버전 2.0 HoK(holder-of-key) 토큰을 작성하십시오.
//User expression on how SAML should be created, default provided
RequesterConfig reqData =  samlFactory.newAsymmetricHolderOfKeyTokenGenerateConfig();

//Choose a public key to be included in SAML
reqData.setKeyAliasForRequester("SOAPInitiator"); 

//Get issuer key store so can sign or encrypt assertion, issuer name
ProviderConfig samlIssuerCfg = samlFactory.newDefaultProviderConfig("any_issuer");

//Get JAAS Subject so the factory can populate principal and attributes to SAML
Subject subject =  com.ibm.websphere.security.auth.WSSubject.getRunAsSubject(); 

SAMLToken samlToken =  samlFactory.newSAMLToken(subject, reqData, samlIssuerCfg);
다음 샘플 코드를 사용하여 비밀 키(대칭 키)를 사용하는 SAML 버전 2.0 HoK(holder-of-key) 토큰을 작성하십시오.
SAMLTokenFactory samlFactory =  SAMLTokenFactory.getInstance (SAMLTokenFactory.WssSamlV20Token11);

RequesterConfig reqData = samlFactory. newSymmetricHolderOfKeyTokenGenerateConfig ();
//Map "AppliesTo" to key alias so library knows how to encrypt the Symmetric Key
reqData.setKeyAliasForAppliesTo("SOAPRecipient"); 

ProviderConfig samlIssuerCfg = samlFactory.newDefaultProviderConfig(null);

CredentialConfig cred = samlFactory.newCredentialConfig ();
cred.setRequesterNameID("any_name"); 

SAMLToken samlToken =  samlFactory.newSAMLToken(subject, reqData, samlIssuerCfg);

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



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