SAML 라이브러리 API를 사용하여 사용자 정의 NameID가 있는 SAML 토큰을 작성할 수 있습니다.
이 태스크 정보
SAML 토큰 생성기를 사용하여 자체 발행된 SAML 토큰을 작성한 경우
콜백 핸들러 특성을 사용하여 NameID를 사용자 정의하는 방법은 없습니다. 그러나
SAML 라이브러리 API를 사용하면 SAMLIssuerConfig.properties 파일에
정의된 사용자 정의 SAML NameID 콜백 핸들러(자체 발행된 SAML 토큰의 NameID를 사용자 정의할
수 있음)를 작성할 수 있습니다. newSAMLToken
메소드를 사용하는 애플리케이션에서 SAML NameID 콜백 핸들러를 사용할 수도 있습니다.
SAML NameID 콜백 핸들러는 수정된 SAMLIssuerConfig.properties 파일을 통해
애플리케이션 서버에서 작성된 모든 SAML 토큰에 대해 실행됩니다.
프로시저
- 사용자 정의 SAML NameID 콜백 핸들러를 개발하십시오. 예를 들어, 다음과 같습니다.
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.NameIDCallback;
import com.ibm.wsspi.wssecurity.saml.data.SAMLNameID;
public class NameIDProvider 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 NameIDCallback) {
NameIDCallback callback = (NameIDCallback)callbacks[i];
SAMLNameID nameid = new SAMLNameID("newNameID", null, null, null, null);
callback.setSAMLNameID(nameid);
}
}
}
}
- NameIDProvider 사용자 정의 특성을 (cellRoot)/sts/SAMLIssuerConfig.properties
파일에 추가하십시오. 예: NameIDProvider =test.saml.NameIDProvider
결과
제공된 샘플 코드를 사용하여 이 태스크를 완료하면 다음 요소가 모든 SAML 토큰에 추가됩니다.
<saml:Subject>
<saml:NameID>newNameID</saml:NameID>
</saml:Subject>