Utilice las SPI GenericSecurityTokenFactory para crear señales de seguridad personalizadas que serán utilizadas por el tiempo de ejecución WS-Security. Estas señales de seguridad pueden ser utilizadas, no de forma exclusiva, para WSSAPI, módulos de inicio de sesión JAAS y señales de seguridad personalizadas.
Acerca de esta tarea
GenericSecurityTokenFactory proporciona varias SPI para crear señales personalizadas que pueden emitirse con GenericIssuedTokenGenerateLoginModule.
Una señal de seguridad personalizada que se crea con GenericSecurityTokenFactory es la forma completa de una señal de seguridad que puede ser emitida por el tiempo de ejecución de WS-Security. No es necesario que grabe un emisor o receptor, como writeExternal o readExternal,
para la señal que crea utilizando estas SPI. Sólo se necesitan dos tipos de información:
- El elemento de la señal, que es Axiom o implementación w3c.dom
- El tipo de valor
En los pasos siguientes, la señal personalizada que se crea es UsernameToken. Esta señal se ha seleccionado como señal personalizada que debe crearse porque es un tipo bien conocido y tiene una buena combinación de elementos, subelementos y atributos. Con el fin de determinar los métodos que deben utilizarse para crear señales de seguridad personalizadas propias, examine el XML de un UsernameToken, y hágalo coincidir con los que se realiza en los métodos incluidos en uno de los pasos siguientes.
- Cree una señal personalizada a partir de una serie
import javax.xml.namespace.QName;
import com.ibm.websphere.wssecurity.wssapi.token.GenericSecurityTokenFactory;
import com.ibm.websphere.wssecurity.wssapi.token.SecurityToken;
//Cree una SecurityToken de UsernameToken a partir de una serie
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);
//Cree una SecurityToken personalizada a partir de una serie
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);
- Cree una señal personalizada desde un elemento a 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);
- Cree una señal personalizada desde un elemento Axiom.dom.
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);
- Cree un elemento de señal personalizada w3c.dom.
import javax.xml.soap.SOAPFactory;
import javax.xml.soap.SOAPElement;
SOAPElement getDomUntElement(String username, String password, String uniqueId) {
SOAPFactory factory = SOAPFactory.newInstance();
//Crear el elemento UsernameToken
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);
//Crear el elemento Username
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);
//Añadir el elemento Username a UsernameToken
untElement.addChildElement(unameElement);
if (password != null) {
//Crear el elemento de contraseña
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);
//Añadir el elemento Password al UsernameToken
untElement.addChildElement(passElement);
}
return untElement;
}
- Cree un elemento de señal personalizada 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();
//Crear el elemento UsernameToken
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);
//Crear el elemento Username
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);
//Añadir el elemento Username a UsernameToken
untElement.addChild(unameElement);
if (password != null) {
//Crear el elemento de contraseña
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);
//Añadir el elemento Password al UsernameToken
untElement.addChild(passElement);
}
return untElement;
}