XPath-Ausdrücke für WS-Security erstellen
WS-Security-Konfigurationen in JAX-RPC und JAX-WS verwenden XML-basierte SOAP-Nachrichten, um Informationen zwischen den Anwendungen auszutauschen. Sie können einen XPath-Ausdruck verwenden, um bestimmte Elemente in einer SOAP-Nachricht zum Signieren oder Verschlüsseln auszuwählen.
Vorbereitende Schritte
Wenn Sie Elemente in einer SOAP-Nachricht (Simple Object Access Protocol) signieren oder verschlüsseln möchten, können Sie die bestimmten Elemente in der Nachricht mit XPath-Ausdrücken auswählen. SOAP-1.1- und SOAP-1.2-Nachrichten habe ein unterschiedliches Format und erfordern daher separate XPath-Ausdrücke zur Auswahl der Elemente in den verschiedenen Versionen der Nachricht. Die JAX-WS-Laufzeitumgebung unterstützt sowohl SOAP 1.1 als auch SOAP 1.2., daher müssen Sie in die WS-Security-Richtlinien für jedes auszuwählende Element zwei XPath-Ausdrücke aufnehmen: einen für SOAP 1.1 und einen für SOAP 1.2. Die JAX-RPC-Laufzeitumgebung unterstützt nur SOAP 1.1, daher müssen Sie nur die Version SOAP 1.1 des XPath-Ausdrucks in die WS-Security-Richtlinien aufnehmen.
Die Unterschiede im Format von SOAP-1.1- und SOAP-1.2-Nachrichten sind im folgenden Szenario zur Auswahl des Elements Timestamp in den SOAP-Nachrichten einer WS-Security-Konfiguration in JAX-WS hervorgehoben.
Das folgende Beispiel zeigt eine SOAP-1.1-Nachricht mit einem Timestamp-Element.
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header>
<wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
<wsu:Timestamp wsu:Id="Timestamp-16" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<wsu:Created>2012-01-11T12:55:41.781Z</wsu:Created>
<wsu:Expires>2012-01-11T15:42:21.781Z</wsu:Expires>
</wsu:Timestamp>
</wsse:Security>
</soapenv:Header>
</soapenv:Envelope>
Das folgende Beispiel zeigt eine SOAP-1.2-Nachricht mit einem Timestamp-Element.
<soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope">
<soapenv:Header>
<wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
<wsu:Timestamp u:Id="uuid-169b0950-217e-48af-9057-ea832e0c7e19-14" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<wsu:Created>2009-09-08T14:08:36.224Z</wsu:Created>
<wsu:Expires>2009-09-08T14:13:36.224Z</wsu:Expires>
</wsu:Timestamp>
</wsse:Security>
</soapenv:Header>
</soapenv:Envelope>
Die XPath-Ausdrücke, die SOAP-Nachrichtenelemente auswählen, befinden sich in den WS-Security-Standardrichtlinien, die Konfigurationsinformationen für die digitale XML-Signatur enthalten. In einer JAX-WS-WS-Security-Konfiguration erscheinen die XPath-Ausdrücke paarweise, wobei jeweils ein XPath-Ausdruck für jede unterstützte SOAP-Version enthalten ist.
Im folgenden Beispiel sind die XPath-Ausdrücke dargestellt, mit denen das Element Timestamp (Zeitmarke) in den SOAP-1.1- und SOAP-1.2-Nachrichten in den vorherigen Beispielen ausgewählt wird. Der erste XPath-Ausdruck wählt Timestamp in der SOAP-1.1-Nachricht aus, und der zweite XPath-Ausdruck wählt Timestamp in der SOAP-1.2-Nachricht aus.
/*[namespace-uri()='http://schemas.xmlsoap.org/soap/envelope/' and local-name()='Envelope']
/*[namespace-uri()='http://schemas.xmlsoap.org/soap/envelope/' and local-name()='Header']
/*[namespace-uri()='http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd' and local-name()='Security']
/*[namespace-uri()='http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd' and local-name()='Timestamp']
/*[namespace-uri()='http://www.w3.org/2003/05/soap-envelope' and local-name()='Envelope']
/*[namespace-uri()='http://www.w3.org/2003/05/soap-envelope' and local-name()='Header']
/*[namespace-uri()='http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd' and local-name()='Security']
/*[namespace-uri()='http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd' and local-name()='Timestamp']
Die ersten beiden Zeilen der XPath-Ausdrücke sind für jede Version verschieden, die letzten beiden Zeilen der XPath-Ausdrücke sind gleich. Der Unterschied zwischen den beiden XPath-Ausdrücken ist der Namespace in den Elementen Envelope und Header. Die Namespaces in den XPath-Ausdrücken entsprechen den Namespaces in den SOAP-1.1- und SOAP-1.2-Nachrichten.
Informationen zu diesem Vorgang
Diese Aufgabe beschreibt, wie XPath-Ausdrücke erstellt werden, die zum Signieren oder Verschlüsseln eines Elements in WS-Security verwendet werden. JAX-WS-Sicherheitskonfigurationen erfordern separate XPath-Ausdrücke für SOAP 1.1 und SOAP 1.2, während in JAX-RPC-Sicherheitskonfigurationen nur XPath-Ausdrücke für SOAP 1.1 erforderlich sind.
Wenn Sie ein SOAP-Nachrichtenelement auswählen möchten, das in WS-Security häufig verwendet wird, sehen Sie sich Option 1 zum Erstellen von XPath-Ausdrücken mit vvordefinierten Codesegmenten an. Andernfalls fahren Sie mit Option 2 fort, um zu erfahren, wie angepasste XPath-Ausdrücke für andere Elemente erstellt werden.

Vorgehensweise
Ergebnisse
Sie haben einen XPath-Ausdruck erstellt, der eine Element eines SOAP-1.1- oder SOAP-1.2-Nachrichtenheaders auswählt.
Beispiel
/*[namespace-uri()='http://www.w3.org/2003/05/soap-envelope' and local-name()='Envelope']
/*[namespace-uri()='http://www.w3.org/2003/05/soap-envelope' and local-name()='Header']
/*[namespace-uri()='http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd' and local-name()='Security']
/*[namespace-uri()='http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd' and local-name()='UsernameToken']