Vous pouvez utiliser les SPI GenericSecurityTokenFactory pour créer des jetons de sécurité que l'exécution WS-Security doit utiliser. Ces jetons de sécurité peuvent être utilisés pour les WSSAPI, les modules de connexion JAAS et les jetons de sécurité personnalisés, mais ils ne s'y limitent pas.
Pourquoi et quand exécuter cette tâche
The GenericSecurityTokenFactory fournit plusieurs SPI permettant de créer des jetons personnalisés qui peuvent être émis avec le module GenericIssuedTokenGenerateLoginModule.
Un jeton de sécurité personnalisé créé avec GenericSecurityTokenFactory est la forme complète d'un jeton de sécurité qui peut être émis par l'exécution WS-Security.
Il n'est pas nécessaire d'écrire un émetteur ou un récepteur, tel que writeExternal ou readExternal, pour le jeton que vous créez en utilisant ces SPI. Seuls deux éléments d'informations sont nécessaires :
- L'élément jeton qui correspond à l'implémentation Axim ou w3c.dom
- Le type de valeur
Dans les étapes suivantes, le jeton personnalisé créé s'appelle UsernameToken. Nous avons sélectionné ce jeton comme jeton personnalisé à créer car il s'agit
d'une forme connue et qu'il combine des éléments, des sous-éléments et des attributs
appropriés. Pour déterminer les méthodes à utiliser pour générer vos propres jetons
personnalisés, consultez le code XML d'un jeton UsernameToken et adaptez-le en fonction
des opérations exécutées dans les méthodes incluses dans l'une des étapes suivantes.
- Créez un jeton personnalisé depuis une chaîne.
import javax.xml.namespace.QName;
import com.ibm.websphere.wssecurity.wssapi.token.GenericSecurityTokenFactory;
import com.ibm.websphere.wssecurity.wssapi.token.SecurityToken;
//Créez un jeton UsernameToken SecurityToken depuis une chaîne
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);
//Créez un jeton SecurityToken personnalisé depuis une chaîne
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);
- Créez un jeton personnalisé depuis un élément 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);
- Créez un jeton personnalisé depuis un élément 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);
- Créez un élément de jeton personnalisé w3c.dom.
import javax.xml.soap.SOAPFactory;
import javax.xml.soap.SOAPElement;
SOAPElement getDomUntElement(String username, String password, String uniqueId) {
SOAPFactory factory = SOAPFactory.newInstance();
//Créer l'élément 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);
//Créer l'élément 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);
//Ajouter l'élément Username à UsernameToken
untElement.addChildElement(unameElement);
if (password != null) {
//Créer l'élément Password
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);
//Ajouter l'élément Password à UsernameToken
untElement.addChildElement(passElement);
}
return untElement;
}
- Créez un élément de jeton personnalisé 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();
//Créer l'élément 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);
//Créer l'élément 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);
//Ajouter l'élément Username à UsernameToken
untElement.addChild(unameElement);
if (password != null) {
//Créer l'élément Password
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);
//Ajouter l'élément Password à UsernameToken
untElement.addChild(passElement);
}
return untElement;
}