GenericSecurityTokenFactory SPI를 사용하여 웹 서비스 보안을 위한 사용자 정의 보안 토큰 작성
GenericSecurityTokenFactory SPI를 사용하여 WS-Security 런타임에 사용할 사용자 정의 보안 토큰을 작성할 수 있습니다. 이러한 보안 토큰은 WSSAPI, JAAS 로그인 모듈 및 사용자 정의 보안 토큰 등에 사용할 수 있습니다.
이 태스크 정보
GenericSecurityTokenFactory는 GenericIssuedTokenGenerateLoginModule을 사용하여 생성할 수 있는 사용자 정의 토큰을 작성하기 위한 여러 SPI를 제공합니다.
GenericSecurityTokenFactory를 사용하여 작성되는 사용자 정의 토큰은
WS-Security 런타임에 의해 생성될 수 있는 보안 토큰의 완전한 양식입니다.
이러한 API를 사용하여 작성하는 토큰에 대해서는 writeExternal
또는 readExternal과 같은 이미터 또는 수신기를 작성하지 않아도 됩니다. 두 가지 정보만 필요합니다.
- Axiom 또는 w3c.dom 구현인 토큰 요소
- 값 유형
다음 단계에서 작성되는 사용자 정의 토큰은 UsernameToken입니다. 작성할 사용자 정의 토큰으로 이 토큰을 선택했습니다. 이 토큰은 잘 알려진 양식이고 요소, 하위 요소 및 속성의 혼합이 쉽기 때문입니다. 자체 사용자 정의 토큰을 빌드하기 위해 사용해야 하는 메소드를 판별하려면 UsernameToken에 대한 XML을 참조하고 해당 XML을 다음 단계 중 하나에 포함되어 있는 메소드에서 수행된 작업과 맞춰보십시오.
프로시저
- 문자열로부터 사용자 정의 토큰을 작성하십시오.
import javax.xml.namespace.QName; import com.ibm.websphere.wssecurity.wssapi.token.GenericSecurityTokenFactory; import com.ibm.websphere.wssecurity.wssapi.token.SecurityToken; //Create a UsernameToken SecurityToken from a String final String untString="<sec:UsernameToken utl:ID=\"_unt999\" xmlns:sec=\"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd\"xmlns:utl=\"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd\">"+ "<sec:Username>myUsername</sec:Username>"+ "<sec:Password Type=\"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText\">myPassword</sec:Password>"+ "</sec:UsernameToken>"; GenericSecurityTokenFactory gst = GenericSecurityTokenFactory.getInstance(); QName valueType = new QName("", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#UsernameToken"); SecurityToken unt = gst.getToken(untString,valueType); //Create a custom SecurityToken from a String final String customString="<acme:MyToken xmlns:acme=\"http://www.acme.com\""+ "xmlns:utl=\"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd\" utl:Id=\"cust_3\">"+ "<acme:Email>joe.smith@acme.com</acme:Email>"+ "</acme:MyToken>"; QName custValueType = new QName("http://www.acme.com","MyToken"); SecurityToken custSt = gst.getToken(customString, custValueType);
- w3c.dom 요소로부터 사용자 정의 토큰을 작성하십시오.
import javax.xml.soap.SOAPElement; import com.ibm.websphere.wssecurity.wssapi.token.GenericSecurityTokenFactory; import com.ibm.websphere.wssecurity.wssapi.token.SecurityToken; import javax.xml.namespace.QName; ... GenericSecurityTokenFactory gstFactory = GenericSecurityTokenFactory.getInstance(); SOAPElement untElement = getDomUntElement("myUsername", "myPassword", gstFactory.createUniqueId()); QName valueType = new QName("", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#UsernameToken"); SecurityToken unt = gstFactory.getToken(untElement, valueType);
- Axiom 요소로부터 사용자 정의 토큰을 작성하십시오.
import org.apache.axiom.om.OMElement; import com.ibm.websphere.wssecurity.wssapi.token.GenericSecurityTokenFactory; import com.ibm.websphere.wssecurity.wssapi.token.SecurityToken; import javax.xml.namespace.QName; ... GenericSecurityTokenFactory gstFactory = GenericSecurityTokenFactory.getInstance(); OMElement untElement = getAxiomUntElement("myUsername", "myPassword", gstFactory.createUniqueId()); QName valueType = new QName("", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#UsernameToken"); SecurityToken unt = gstFactory.getToken(untElement, valueType);
- Create a w3c.dom custom token element.
import javax.xml.soap.SOAPFactory; import javax.xml.soap.SOAPElement; SOAPElement getDomUntElement(String username, String password, String uniqueId) { SOAPFactory factory = SOAPFactory.newInstance(); //Create the UsernameToken element SOAPElement untElement = factory.createElement("UsernameToken", "sec", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"); untElement.addAttribute(new QName("http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd", "Id", "utl"), uniqueId); //Create the Username element SOAPElement unameElement = factory.createElement("Username", "sec", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"); unameElement.addTextNode(username); //Add the Username element to the UsernameToken untElement.addChildElement(unameElement); if (password != null) { //Create the Password element SOAPElement passElement = factory.createElement("Password", "sec", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"); passElement.addAttribute(new QName("Type"), "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText"); passElement.addTextNode(password); //Add the Password element to the UsernameToken untElement.addChildElement(passElement); } return untElement; }
- Axiom 사용자 정의 토큰 요소를 작성하십시오.
import org.apache.axiom.om.OMAbstractFactory; import org.apache.axiom.om.OMFactory; import org.apache.axiom.om.OMElement; import org.apache.axiom.om.OMNamespace; OMElement getAxiomUntElement(String username, String password, String uniqueId) { OMFactory factory = OMAbstractFactory.getOMFactory(); //Create the UsernameToken element OMElement untElement = factory.createOMElement("UsernameToken", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd", "sec"); OMNamespace idNs = factory.createOMNamespace("http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd", "utl"); untElement.addAttribute("Id", uniqueId, idNs); //Create the Username element OMElement unameElement = factory.createOMElement("Username", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd", "sec"); unameElement.setText(username); //Add the Username element to the UsernameToken untElement.addChild(unameElement); if (password != null) { //Create the Password element OMElement passElement = factory.createOMElement("Password", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd", "sec"); passElement.addAttribute("Type", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText", null); passElement.setText(password); //Add the Password element to the UsernameToken untElement.addChild(passElement); } return untElement; }


http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=twbs_createcustomtokens
파일 이름:twbs_createcustomtokens.html