SAML 라이브러리 API는 사용자 정의 속성을 가지고 있는 자체 서명된 SAML 토큰을 작성할 때 사용할 수 있습니다.
이 태스크 정보
자체 서명된 SAML 토큰은 콜백 핸들러 특성을 사용하여 사용자 정의 속성을 추가하는 방법이 없는 경우
SAML 토큰 생성기를 사용하여 작성됩니다. 그러나 SAML 라이브러리 API를 사용하면, SAMLIssuerConfig.properties에 정의된 사용자 정의
SAML 속성 콜백 핸들러는 속성이 작성될 수 있고 자체 서명된 SAML 토큰에 속성을 추가할 수 있습니다.
SAML 속성 콜백 핸들러는 newSAMLToken 메소드를 사용하는 애플리케이션에 의해 사용될 수도 있습니다.
SAML 속성 콜백 핸들러는 수정된 SAMLIssuerConfig.properties
파일을 사용하여 애플리케이션 서버에서 작성된 모든 SAML 토큰에 대해 실행됩니다.
프로시저
- 사용자 정의 SAML 속성 콜백 핸들러를 개발하십시오. 예를 들어, 다음과 같습니다.
package test.saml;
import java.io.IOException;
import javax.security.auth.callback.Callback;
import javax.security.auth.callback.UnsupportedCallbackException;
import com.ibm.websphere.wssecurity.callbackhandler.Saml11AttributeCallback;
import com.ibm.wsspi.wssecurity.saml.data.SAMLAttribute;
import java.util.ArrayList;
public class AttributeProvider implements javax.security.auth.callback.CallbackHandler {
@Override
public void handle(Callback[] callbacks) throws IOException,
UnsupportedCallbackException {
if (callbacks == null || callbacks.length == 0) {
throw new UnsupportedCallbackException(null, "There is no callback.");
}
for (int i = 0; i < callbacks.length; i++) {
if (callbacks[i] instanceof Saml11AttributeCallback) {
Saml11AttributeCallback callback = (Saml11AttributeCallback)callbacks[i];
SAMLAttribute attr = new SAMLAttribute("newAttribute", new String[]{"newValue"}, null, null, null, null);
ArrayList<SAMLAttribute> attrList = callback.getSAMLAttributes();
if (attrList == null) {
attrList = new ArrayList<SAMLAttribute>();
attrList.add(attr);
callback.setSAMLAttributes(attrList);
} else {
attrList.add(attr);
}
}
}
}
}
- AttributeProvider 사용자 정의 특성을 (cellRoot)/sts/SAMLIssuerConfig.properties
파일에 추가하십시오. 예제: AttributeProvider=test.saml.AttributeProvider
결과
제공된 샘플 코드를 사용하여 이 태스크를 완료하면 다음 요소가 모든 SAML 토큰에 추가됩니다.
<saml:AttributeStatement>
<saml:Attribute Name="newAttribute">
<saml:AttributeValue>newValue</saml:AttributeValue>
</saml:Attribute>
</saml:AttributeStatement>