Verwenden Sie SPIs von
GenericSecurityTokenFactory, um angepasste Sicherheitstoken zur Verwendung durch die WS-Security-Laufzeit
zu erstellen. Diese Sicherheitstoken können von
WSSAPIs, JAAS-Anmeldemodulen und angepassten Sicherheitstoken verwendet werden, aber Ihre Verwendung ist
nicht auf diese Komponenten beschränkt.
Informationen zu diesem Vorgang
Die GenericSecurityTokenFactory stellt mehrere SPIs bereit, um angepasste Token zu erstellen,
die mit dem GenericIssuedTokenGenerateLoginModule ausgegeben werden können.
Ein angepasstes Sicherheitstoken, das mit
der GenericSecurityTokenFactory erstellt wird,
hat die vollständige Form eines Sicherheitstokens, das von
der WS-Security-Laufzeit ausgegeben werden kann.
Es ist nicht erforderlich,
für das Token, das Sie mit diesen SPIs erstellen, einen Emitter oder einen Empfänger wie z. B.
writeExternal oder readExternal zu schreiben.
Lediglich zwei Informationen sind erforderlich:
- das Tokenelement, entweder Axiom- oder w3c.dom-Implementierung
- der Wertetyp
Das in den
folgenden Schritten erstellte Token ist ein Benutzernamenstoken
(UsernameToken). Dieses Token wurden als angepasstes Token ausgewählt, weil es sich um eine anerkannte Form handelt und weil es
über eine gute Kombination von Elementen, untergeordneten Elementen und Attributen verfügt.
Um die Methoden zu ermitteln, die Sie zum Erstellen eines eigenen angepassten Tokens benötigen,
schauen Sie sich die XML für ein Benutzernamenstoken an, und gleichen Sie sie mit den
Angaben in den Methoden ab, die in einem der nachfolgenden Schritte
enthalten sind.
- Angepasstes Token aus einer Zeichenfolge (String) erstellen.
import javax.xml.namespace.QName;
import com.ibm.websphere.wssecurity.wssapi.token.GenericSecurityTokenFactory;
import com.ibm.websphere.wssecurity.wssapi.token.SecurityToken;
//Benutzernamenstoken (UsernameToken) als Sicherheitstoken aus einer Zeichenfolge (String) erstellen.
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);
//Angepasstes Sicherheitstoken (SecurityToken) aus einer Zeichenfolge (String) erstellen
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);
- Angepasstes Token
aus einem w3c.dom-Element erstellen.
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);
- Angepasstes Token aus einem Axiom-Element erstellen.
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);
- Angepasstes w3c.dom-Tokenelement erstellen.
import javax.xml.soap.SOAPFactory;
import javax.xml.soap.SOAPElement;
SOAPElement getDomUntElement(String username, String password, String uniqueId) {
SOAPFactory factory = SOAPFactory.newInstance();
//UsernameToken-Element erstellen
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);
//Username-Element erstellen
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);
//Username-Element dem UsernameToken hinzufügen
untElement.addChildElement(unameElement);
if (password != null) {
//Password-Element erstellen
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);
//Password-Element dem UsernameToken hinzufügen
untElement.addChildElement(passElement);
}
return untElement;
}
- Angepasstes Axiom-Tokenelement erstellen.
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();
//UsernameToken-Element erstellen
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);
//Username-Element erstellen
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);
//Username-Element dem UsernameToken hinzufügen
untElement.addChild(unameElement);
if (password != null) {
//Password-Element erstellen
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);
//Password-Element dem UsernameToken hinzufügen
untElement.addChild(passElement);
}
return untElement;
}