SAML 라이브러리 API를 사용하여 전송자 인증 확인 메소드를 포함하는 SAML 전송자 인증 토큰을 작성할 수 있습니다. 발신자-인증 확인 방법은 서버가
클라이언트 ID 또는 클라이언트 동작을 전파해야 하는 경우
사용됩니다.
이 태스크 정보
SAML 기능이 WebSphere® 서버에 설치되면 SAML 라이브러리
API가 제공됩니다. 이 라이브러리를 사용하여 SAML 전송자 인증 토큰을 작성하십시오. SAML 라이브러리 API를 사용하여
필수 SAML 구성 오브젝트를 작성할 수 있습니다. 그런 다음 작성한 구성 오브젝트를 사용하여 SAML 전송자 인증 토큰을 생성하십시오.
프로시저
- SAML 토큰 버전을 매개변수로 사용하여 SAMLTokenFactory 인스턴스를 작성하십시오.
- 다음 코드 행을 사용하여 메소드를 가져오십시오.
import com.ibm.websphere.wssecurity.wssapi.token.SAMLTokenFactory;
- 토큰 버전에 따라 이러한 코드 행 중 하나를 사용하여 인스턴스를 작성하십시오.
- 인스턴스를 작성한 후에 SAMLTokenFactory는 요청자의 인증 요구사항에 따라 토큰이 생성되는 방식을 판별하는 RequesterConfig 인스턴스를 작성하는 데 사용됩니다. 이 코드 행을 사용하여 전송자 인증 토큰에 대해 RequesterConfig
인스턴스를 작성하십시오.
RequesterConfig reqData = samlFactory.newSenderVouchesTokenGenerateConfig();
기본
RequestConfig 인스턴스는 단순 전송자 인증 토큰을 생성하는 데에는 충분하지만
RequesterConfig 인스턴스를 사용자 정의하여 추가 어설션을 SAML 토큰에 포함시킬 수 있습니다. 예를 들어,
비밀번호 인증 정보를 토큰에 포함시키려면 setAuthenticationMethod를 사용하십시오.
reqData.setAuthenticationMethod(“password”);
전송자 인증 어설션에 대한 신뢰 유효성 검증은
발행자가 아닌 전송자의 책임이므로 Enveloped-Signature 요소는 이 어설션에서 필요하지 않습니다. Enveloped-Signature
요소를 SAML 어설션에서 제거하려면 setAssertionSignatureRequired
메소드를 사용하십시오. 예를 들면, 다음과 같습니다.
reqData.setAssertionSignatureRequired(false);
- SAMLTokenFactory API를 사용하여 토큰 발행자를 설명하는 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의 기본 발행자 이름 특성이 발행자 이름으로 사용됩니다.
- 옵션: 새 SAML 토큰을 작성할 때 SAMLTokenFactory는 JAAS(Java Authentication and Authorization
Service) 주제 또는 CredentialConfig
인스턴스를 사용하여 새 SAML 토큰을 채웁니다. JAAS 주제를 사용하여 토큰을 채우려면 com.ibm.websphere.security.auth.WSSubject
getCallerSubject() API 또는 getRunAsSubject() API를 사용하여 요청 클라이언트 또는 실행 스레드의 ID를 나타내는 JAAS
주제를 얻으십시오.
- JAAS 주제를 사용하여 새 SAML 토큰을 작성할 때 SAMLTokenFactory API는
주제 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");
setRequesterNameID() 메소드에
전달되는 매개변수의 값은 SAML 토큰에서
프린시펄 이름으로 사용됩니다. 이 이름은 SAML 버전 1.1 토큰에서는 NameIdentifier로, SAML 버전 2.0 토큰에서는 NameId로 어설션에 표시됩니다. 예를 들어, setRequesterNameID() 메소드에 전달되는 매개변수의 값이 Alice인 경우 SAML 버전 1.1 토큰에서 다음 어설션이 생성됩니다.
<saml:NameIdentifier>Alice</saml:NameIdentifier>
다음 어설션은
SAML 버전 2.0 토큰에서 생성됩니다. <saml2:NameID>Alice</saml2:NameID>
- SAML 속성을 어설션의 <AttributeStatement> 부분에 포함시키려면 다음 코드를 사용하십시오.
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);
이 샘플 코드는 다음 <속성> 어설션을 생성합니다. <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>
- 다음 코드 행을 사용하여 SAML 전송자 인증 토큰을 생성하십시오.
SAMLToken samlToken = samlFactory.newSAMLToken(cred, reqData, samlIssuerCfg);
이 메소드는
Java 보안 권한 wssapi.SAMLTokenFactory.newSAMLToken을 요구합니다.
이전 단계의 코드 행을 사용하는 완전한 코드 샘플이 예제 섹션에 포함되어 있습니다.
예
다음 샘플 코드를 사용하여 주제에서 SAML 버전 1.1 전송자 인증 토큰을 작성하십시오.
SAMLTokenFactory samlFactory = SAMLTokenFactory.getInstance(SAMLTokenFactory.WssSamlV11Token11)
RequesterConfig reqData = samlFactory.newSenderVouchesTokenGenerateConfig();
ProviderConfig samlIssuerCfg = samlFactory.newDefaultProviderConfig(“WebSphere Server”);
Subject subject = com.ibm.websphere.security.auth.WSSubject.getRunAsSubject();
SAMLToken samlToken = samlFactory.newSAMLToken(subject, reqData, samlIssuerCfg);
다음 샘플 코드를 사용하여
주제를 사용하지 않고 SAML 버전 1.1 전송자 인증 토큰을 작성하십시오.
SAMLTokenFactory samlFactory = SAMLTokenFactory.getInstance(SAMLTokenFactory.WssSamlV11Token11);
RequesterConfig reqData = samlFactory.newSenderVouchesTokenGenerateConfig();
reqData.setAuthenticationMethod("Password"); //Authentication method for Assertion
ProviderConfig samlIssuerCfg = samlFactory.newDefaultProviderConfig(Self issuer);
CredentialConfig cred = samlFactory.newCredentialConfig ();
cred.setRequesterNameID("Alice"); // SAML NameIdentifier
//SAML attributes:
SAMLAttribute attribute = new SAMLAttribute
("email" /* Name*/, new String[] {"joe@websphere"}
/*Attribute Values in String*/,null
/*Attribute Values in XML */, "WebSphere" /* Namespace*/, "email" /* format*/, "joe" /*Friendly_name */);
ArrayList<SAMLAttribute> al = new ArrayList<SAMLAttribute>();
al.add(attribute);
attribute = new SAMLAttribute("Membership", new String[] {"Super users", "My team"}, null, null, null, null );
al.add(attribute);
cred.setSAMLAttributes(al);
SAMLToken samlToken = samlFactory.newSAMLToken(cred, reqData, samlIssuerCfg);