Use as SPIs GenericSecurityTokenFactory para criar tokens de segurança customizados para serem usados pelo tempo de execução do WS-Security. Esses tokens de segurança podem ser usados para WSSAPIs, módulos de login de JAAS e tokens de segurança customizados, mas não estão limitados a eles.
Sobre Esta Tarefa
O GenericSecurityTokenFactory fornece vários SPIs para criar tokens customizados que podem ser emitidos
com o GenericIssuedTokenGenerateLoginModule.
Um token de segurança customizado criado com o GenericSecurityTokenFactory é a forma completa de um token de segurança que pode ser emitido pelo tempo de execução do WS-Security.
Não é necessário gravar um emissor ou um receptor, como o writeExternal ou o readExternal, para o token criado usando esses arquivos. Somente dois tipos de informações são necessários:
- O elemento de token, que é a implementação de Axiom ou de w3c.dom
- O tipo de valor
Nas etapas a seguir, será criado o token customizado UsernameToken. Selecionamos esse token como o token customizado a ser criado por ele ser um formulário bastante conhecido e ter uma boa combinação de elementos, subelementos e atributos. Para determinar os métodos que você precisa usar para construir seus próprios tokens customizados, consulte o XML para UsernameToken e faça a correspondência desse XML com o que está sendo feito nos métodos incluídos em uma das etapas a seguir.
- Criar um token customizado a partir de um String
import javax.xml.namespace.QName;
import com.ibm.websphere.wssecurity.wssapi.token.GenericSecurityTokenFactory;
import com.ibm.websphere.wssecurity.wssapi.token.SecurityToken;
//Criar um UsernameToken SecurityToken a partir de um 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);
//Criar um SecurityToken customizado a partir de um 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);
- Crie um token customizado a partir de um elemento 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);
- Crie um token customizado a partir de um elemento 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);
- Crie um elemento de token customizado w3c.dom.
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;
}
- Crie um elemento de token customizado 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;
}