Repository: cxf Updated Branches: refs/heads/master 016140cc8 -> 2f25e4d74
[CXF-7365] Making sure a b64 status false value is enforced and headers are correctly submitted to the sig process, optional support for jws json Project: http://git-wip-us.apache.org/repos/asf/cxf/repo Commit: http://git-wip-us.apache.org/repos/asf/cxf/commit/2f25e4d7 Tree: http://git-wip-us.apache.org/repos/asf/cxf/tree/2f25e4d7 Diff: http://git-wip-us.apache.org/repos/asf/cxf/diff/2f25e4d7 Branch: refs/heads/master Commit: 2f25e4d7484fb7c2388362418285b122e585bf1b Parents: 016140c Author: Sergey Beryozkin <[email protected]> Authored: Wed May 10 14:10:15 2017 +0100 Committer: Sergey Beryozkin <[email protected]> Committed: Wed May 10 14:10:15 2017 +0100 ---------------------------------------------------------------------- .../jaxrs/JwsDetachedSignatureProvider.java | 24 ++++++--- .../AbstractJwsMultipartSignatureFilter.java | 21 +++++++- .../AbstractJwsMultipartVerificationFilter.java | 12 +++-- .../JwsMultipartSignatureInFilter.java | 55 ++++++++++++++------ .../security/jose/jws/JwsDetachedSignature.java | 16 +++++- .../jose/jwejws/JAXRSJwsMultipartTest.java | 32 ++++++++---- .../security/jose/jwejws/serverMultipart.xml | 16 ++++++ 7 files changed, 137 insertions(+), 39 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cxf/blob/2f25e4d7/rt/rs/security/jose-parent/jose-jaxrs/src/main/java/org/apache/cxf/rs/security/jose/jaxrs/JwsDetachedSignatureProvider.java ---------------------------------------------------------------------- diff --git a/rt/rs/security/jose-parent/jose-jaxrs/src/main/java/org/apache/cxf/rs/security/jose/jaxrs/JwsDetachedSignatureProvider.java b/rt/rs/security/jose-parent/jose-jaxrs/src/main/java/org/apache/cxf/rs/security/jose/jaxrs/JwsDetachedSignatureProvider.java index c4f8bf4..9928da6 100644 --- a/rt/rs/security/jose-parent/jose-jaxrs/src/main/java/org/apache/cxf/rs/security/jose/jaxrs/JwsDetachedSignatureProvider.java +++ b/rt/rs/security/jose-parent/jose-jaxrs/src/main/java/org/apache/cxf/rs/security/jose/jaxrs/JwsDetachedSignatureProvider.java @@ -30,12 +30,10 @@ import javax.ws.rs.ext.MessageBodyWriter; import org.apache.cxf.common.util.Base64UrlUtility; import org.apache.cxf.common.util.StringUtils; -import org.apache.cxf.jaxrs.json.basic.JsonMapObjectReaderWriter; import org.apache.cxf.rs.security.jose.common.JoseUtils; import org.apache.cxf.rs.security.jose.jws.JwsDetachedSignature; public class JwsDetachedSignatureProvider implements MessageBodyWriter<JwsDetachedSignature> { - private JsonMapObjectReaderWriter writer = new JsonMapObjectReaderWriter(); @Override public long getSize(JwsDetachedSignature arg0, Class<?> arg1, Type arg2, Annotation[] arg3, MediaType arg4) { return -1; @@ -51,13 +49,25 @@ public class JwsDetachedSignatureProvider implements MessageBodyWriter<JwsDetach MultivaluedMap<String, Object> headers, OutputStream os) throws IOException, WebApplicationException { JoseUtils.traceHeaders(parts.getHeaders()); - byte[] headerBytes = StringUtils.toBytesUTF8(writer.toJson(parts.getHeaders())); - Base64UrlUtility.encodeAndStream(headerBytes, 0, headerBytes.length, os); - os.write(new byte[]{'.'}); byte[] finalBytes = parts.getSignature().sign(); - os.write(new byte[]{'.'}); - Base64UrlUtility.encodeAndStream(finalBytes, 0, finalBytes.length, os); + + if (!parts.isUseJwsJsonSignatureFormat()) { + os.write(StringUtils.toBytesASCII(parts.getEncodedHeaders())); + byte[] dotBytes = new byte[]{'.'}; + os.write(dotBytes); + os.write(dotBytes); + Base64UrlUtility.encodeAndStream(finalBytes, 0, finalBytes.length, os); + } else { + // use flattened JWS JSON format + os.write(StringUtils.toBytesASCII("{")); + String headersProp = "\"protected\":\"" + parts.getEncodedHeaders() + "\""; + os.write(StringUtils.toBytesUTF8(headersProp)); + os.write(StringUtils.toBytesASCII(",")); + String sigProp = "\"signature\":\"" + Base64UrlUtility.encode(finalBytes) + "\""; + os.write(StringUtils.toBytesUTF8(sigProp)); + os.write(StringUtils.toBytesASCII("}")); + } } } http://git-wip-us.apache.org/repos/asf/cxf/blob/2f25e4d7/rt/rs/security/jose-parent/jose-jaxrs/src/main/java/org/apache/cxf/rs/security/jose/jaxrs/multipart/AbstractJwsMultipartSignatureFilter.java ---------------------------------------------------------------------- diff --git a/rt/rs/security/jose-parent/jose-jaxrs/src/main/java/org/apache/cxf/rs/security/jose/jaxrs/multipart/AbstractJwsMultipartSignatureFilter.java b/rt/rs/security/jose-parent/jose-jaxrs/src/main/java/org/apache/cxf/rs/security/jose/jaxrs/multipart/AbstractJwsMultipartSignatureFilter.java index 2455658..971e6ea 100644 --- a/rt/rs/security/jose-parent/jose-jaxrs/src/main/java/org/apache/cxf/rs/security/jose/jaxrs/multipart/AbstractJwsMultipartSignatureFilter.java +++ b/rt/rs/security/jose-parent/jose-jaxrs/src/main/java/org/apache/cxf/rs/security/jose/jaxrs/multipart/AbstractJwsMultipartSignatureFilter.java @@ -23,9 +23,12 @@ import java.util.List; import javax.ws.rs.ProcessingException; +import org.apache.cxf.common.util.Base64UrlUtility; +import org.apache.cxf.common.util.StringUtils; import org.apache.cxf.helpers.CastUtils; import org.apache.cxf.jaxrs.ext.multipart.Attachment; import org.apache.cxf.jaxrs.ext.multipart.MultipartBody; +import org.apache.cxf.jaxrs.json.basic.JsonMapObjectReaderWriter; import org.apache.cxf.jaxrs.utils.multipart.AttachmentUtils; import org.apache.cxf.rs.security.jose.common.JoseConstants; import org.apache.cxf.rs.security.jose.jws.JwsDetachedSignature; @@ -35,9 +38,11 @@ import org.apache.cxf.rs.security.jose.jws.JwsSignatureProvider; import org.apache.cxf.rs.security.jose.jws.JwsUtils; public abstract class AbstractJwsMultipartSignatureFilter { - + private JsonMapObjectReaderWriter writer = new JsonMapObjectReaderWriter(); + private JwsSignatureProvider sigProvider; private boolean supportSinglePartOnly = true; + private boolean useJwsJsonSignatureFormat; public void setSignatureProvider(JwsSignatureProvider signatureProvider) { this.sigProvider = signatureProvider; @@ -62,13 +67,21 @@ public abstract class AbstractJwsMultipartSignatureFilter { } JwsHeaders headers = new JwsHeaders(); + headers.setPayloadEncodingStatus(false); JwsSignatureProvider theSigProvider = sigProvider != null ? sigProvider : JwsUtils.loadSignatureProvider(headers, true); JwsSignature jwsSignature = theSigProvider.createJwsSignature(headers); + + String base64UrlEncodedHeaders = Base64UrlUtility.encode(writer.toJson(headers)); + byte[] headerBytesWithDot = StringUtils.toBytesASCII(base64UrlEncodedHeaders + "."); + jwsSignature.update(headerBytesWithDot, 0, headerBytesWithDot.length); AttachmentUtils.addMultipartOutFilter(new JwsMultipartSignatureOutFilter(jwsSignature)); - JwsDetachedSignature jws = new JwsDetachedSignature(headers, jwsSignature); + JwsDetachedSignature jws = new JwsDetachedSignature(headers, + base64UrlEncodedHeaders, + jwsSignature, + useJwsJsonSignatureFormat); Attachment jwsPart = new Attachment("signature", JoseConstants.MEDIA_TYPE_JOSE, jws); parts.add(jwsPart); @@ -78,4 +91,8 @@ public abstract class AbstractJwsMultipartSignatureFilter { public void setSupportSinglePartOnly(boolean supportSinglePartOnly) { this.supportSinglePartOnly = supportSinglePartOnly; } + + public void setUseJwsJsonSignatureFormat(boolean useJwsJsonSignatureFormat) { + this.useJwsJsonSignatureFormat = useJwsJsonSignatureFormat; + } } http://git-wip-us.apache.org/repos/asf/cxf/blob/2f25e4d7/rt/rs/security/jose-parent/jose-jaxrs/src/main/java/org/apache/cxf/rs/security/jose/jaxrs/multipart/AbstractJwsMultipartVerificationFilter.java ---------------------------------------------------------------------- diff --git a/rt/rs/security/jose-parent/jose-jaxrs/src/main/java/org/apache/cxf/rs/security/jose/jaxrs/multipart/AbstractJwsMultipartVerificationFilter.java b/rt/rs/security/jose-parent/jose-jaxrs/src/main/java/org/apache/cxf/rs/security/jose/jaxrs/multipart/AbstractJwsMultipartVerificationFilter.java index b09124b..126cd8f 100644 --- a/rt/rs/security/jose-parent/jose-jaxrs/src/main/java/org/apache/cxf/rs/security/jose/jaxrs/multipart/AbstractJwsMultipartVerificationFilter.java +++ b/rt/rs/security/jose-parent/jose-jaxrs/src/main/java/org/apache/cxf/rs/security/jose/jaxrs/multipart/AbstractJwsMultipartVerificationFilter.java @@ -30,6 +30,7 @@ public abstract class AbstractJwsMultipartVerificationFilter { private JwsSignatureVerifier sigVerifier; private boolean supportSinglePartOnly = true; + private boolean useJwsJsonSignatureFormat; public void setSigVerifier(JwsSignatureVerifier sigVerifier) { this.sigVerifier = sigVerifier; @@ -41,11 +42,16 @@ public abstract class AbstractJwsMultipartVerificationFilter { protected void addMultipartFilterIfNeeded(MediaType contentType) { if (contentType != null && contentType.getType().equals("multipart")) { Message m = JAXRSUtils.getCurrentMessage(); - MultipartInputFilter jwsFilter = sigVerifier == null - ? new JwsMultipartSignatureInFilter(m, supportSinglePartOnly) - : new JwsMultipartSignatureInFilter(m, sigVerifier, supportSinglePartOnly); + MultipartInputFilter jwsFilter = new JwsMultipartSignatureInFilter(m, + sigVerifier, + supportSinglePartOnly, + useJwsJsonSignatureFormat); AttachmentUtils.addMultipartInFilter(jwsFilter); } } + + public void setUseJwsJsonSignatureFormat(boolean useJwsJsonSignatureFormat) { + this.useJwsJsonSignatureFormat = useJwsJsonSignatureFormat; + } } http://git-wip-us.apache.org/repos/asf/cxf/blob/2f25e4d7/rt/rs/security/jose-parent/jose-jaxrs/src/main/java/org/apache/cxf/rs/security/jose/jaxrs/multipart/JwsMultipartSignatureInFilter.java ---------------------------------------------------------------------- diff --git a/rt/rs/security/jose-parent/jose-jaxrs/src/main/java/org/apache/cxf/rs/security/jose/jaxrs/multipart/JwsMultipartSignatureInFilter.java b/rt/rs/security/jose-parent/jose-jaxrs/src/main/java/org/apache/cxf/rs/security/jose/jaxrs/multipart/JwsMultipartSignatureInFilter.java index 4b06233..697553e 100644 --- a/rt/rs/security/jose-parent/jose-jaxrs/src/main/java/org/apache/cxf/rs/security/jose/jaxrs/multipart/JwsMultipartSignatureInFilter.java +++ b/rt/rs/security/jose-parent/jose-jaxrs/src/main/java/org/apache/cxf/rs/security/jose/jaxrs/multipart/JwsMultipartSignatureInFilter.java @@ -21,8 +21,10 @@ package org.apache.cxf.rs.security.jose.jaxrs.multipart; import java.io.IOException; import java.io.InputStream; import java.util.List; +import java.util.Map; import java.util.Properties; +import org.apache.cxf.common.util.StringUtils; import org.apache.cxf.helpers.IOUtils; import org.apache.cxf.jaxrs.ext.multipart.Attachment; import org.apache.cxf.jaxrs.ext.multipart.MultipartInputFilter; @@ -39,19 +41,19 @@ import org.apache.cxf.rs.security.jose.jws.JwsUtils; import org.apache.cxf.rs.security.jose.jws.JwsVerificationSignature; public class JwsMultipartSignatureInFilter implements MultipartInputFilter { - + private JsonMapObjectReaderWriter reader = new JsonMapObjectReaderWriter(); private JwsSignatureVerifier verifier; private boolean supportSinglePartOnly; private Message message; - public JwsMultipartSignatureInFilter(Message message, boolean supportSinglePartOnly) { - this(message, null, supportSinglePartOnly); - } - - public JwsMultipartSignatureInFilter(Message message, JwsSignatureVerifier verifier, - boolean supportSinglePartOnly) { + private boolean useJwsJsonSignatureFormat; + public JwsMultipartSignatureInFilter(Message message, + JwsSignatureVerifier verifier, + boolean supportSinglePartOnly, + boolean useJwsJsonSignatureFormat) { this.message = message; this.verifier = verifier; this.supportSinglePartOnly = supportSinglePartOnly; + this.useJwsJsonSignatureFormat = useJwsJsonSignatureFormat; } @Override @@ -61,21 +63,39 @@ public class JwsMultipartSignatureInFilter implements MultipartInputFilter { } Attachment sigPart = atts.remove(atts.size() - 1); - String encodedJws = null; + String jwsSequence = null; try { - encodedJws = IOUtils.readStringFromStream(sigPart.getDataHandler().getInputStream()); + jwsSequence = IOUtils.readStringFromStream(sigPart.getDataHandler().getInputStream()); } catch (IOException ex) { throw ExceptionUtils.toBadRequestException(null, null); } - String[] parts = JoseUtils.getCompactParts(encodedJws); - // Detached signature - if (parts.length != 3 || parts[1].length() > 0) { - throw ExceptionUtils.toBadRequestException(null, null); + + String base64UrlEncodedHeaders = null; + String base64UrlEncodedSignature = null; + + if (!useJwsJsonSignatureFormat) { + String[] parts = JoseUtils.getCompactParts(jwsSequence); + if (parts.length != 3 || parts[1].length() > 0) { + throw ExceptionUtils.toBadRequestException(null, null); + } + base64UrlEncodedHeaders = parts[0]; + base64UrlEncodedSignature = parts[2]; + } else { + Map<String, Object> parts = reader.fromJson(jwsSequence); + if (parts.size() != 2 || !parts.containsKey("protected") || !parts.containsKey("signature")) { + throw ExceptionUtils.toBadRequestException(null, null); + } + base64UrlEncodedHeaders = (String)parts.get("protected"); + base64UrlEncodedSignature = (String)parts.get("signature"); } + JwsHeaders headers = new JwsHeaders( new JsonMapObjectReaderWriter().fromJson( - JoseUtils.decodeToString(parts[0]))); - + JoseUtils.decodeToString(base64UrlEncodedHeaders))); + JoseUtils.traceHeaders(headers); + if (Boolean.FALSE != headers.getPayloadEncodingStatus()) { + throw ExceptionUtils.toBadRequestException(null, null); + } JwsSignatureVerifier theVerifier = null; if (verifier == null) { Properties props = KeyManagementUtils.loadStoreProperties(message, true, @@ -92,7 +112,10 @@ public class JwsMultipartSignatureInFilter implements MultipartInputFilter { if (sig == null) { throw ExceptionUtils.toBadRequestException(null, null); } - byte[] signatureBytes = JoseUtils.decode(parts[2]); + byte[] signatureBytes = JoseUtils.decode(base64UrlEncodedSignature); + + byte[] headerBytesWithDot = StringUtils.toBytesASCII(base64UrlEncodedHeaders + "."); + sig.update(headerBytesWithDot, 0, headerBytesWithDot.length); int attSize = atts.size(); for (int i = 0; i < attSize; i++) { http://git-wip-us.apache.org/repos/asf/cxf/blob/2f25e4d7/rt/rs/security/jose-parent/jose/src/main/java/org/apache/cxf/rs/security/jose/jws/JwsDetachedSignature.java ---------------------------------------------------------------------- diff --git a/rt/rs/security/jose-parent/jose/src/main/java/org/apache/cxf/rs/security/jose/jws/JwsDetachedSignature.java b/rt/rs/security/jose-parent/jose/src/main/java/org/apache/cxf/rs/security/jose/jws/JwsDetachedSignature.java index 4de23f1..8e82be9 100644 --- a/rt/rs/security/jose-parent/jose/src/main/java/org/apache/cxf/rs/security/jose/jws/JwsDetachedSignature.java +++ b/rt/rs/security/jose-parent/jose/src/main/java/org/apache/cxf/rs/security/jose/jws/JwsDetachedSignature.java @@ -20,17 +20,29 @@ package org.apache.cxf.rs.security.jose.jws; public class JwsDetachedSignature { private JwsHeaders headers; + private String base64UrlEncodedHeaders; private JwsSignature signature; - public JwsDetachedSignature(JwsHeaders headers, JwsSignature signature) { + private boolean useJwsJsonSignatureFormat; + public JwsDetachedSignature(JwsHeaders headers, + String base64UrlEncodedHeaders, + JwsSignature signature, + boolean useJwsJsonSignatureFormat) { this.headers = headers; + this.base64UrlEncodedHeaders = base64UrlEncodedHeaders; this.signature = signature; + this.useJwsJsonSignatureFormat = useJwsJsonSignatureFormat; } public JwsHeaders getHeaders() { return headers; } + public String getEncodedHeaders() { + return base64UrlEncodedHeaders; + } public JwsSignature getSignature() { return signature; } - + public boolean isUseJwsJsonSignatureFormat() { + return useJwsJsonSignatureFormat; + } } http://git-wip-us.apache.org/repos/asf/cxf/blob/2f25e4d7/systests/rs-security/src/test/java/org/apache/cxf/systest/jaxrs/security/jose/jwejws/JAXRSJwsMultipartTest.java ---------------------------------------------------------------------- diff --git a/systests/rs-security/src/test/java/org/apache/cxf/systest/jaxrs/security/jose/jwejws/JAXRSJwsMultipartTest.java b/systests/rs-security/src/test/java/org/apache/cxf/systest/jaxrs/security/jose/jwejws/JAXRSJwsMultipartTest.java index 54201a9..ec7ffbc 100644 --- a/systests/rs-security/src/test/java/org/apache/cxf/systest/jaxrs/security/jose/jwejws/JAXRSJwsMultipartTest.java +++ b/systests/rs-security/src/test/java/org/apache/cxf/systest/jaxrs/security/jose/jwejws/JAXRSJwsMultipartTest.java @@ -65,7 +65,16 @@ public class JAXRSJwsMultipartTest extends AbstractBusClientServerTestBase { @Test public void testJwsJwkBookHMacMultipart() throws Exception { String address = "https://localhost:" + PORT + "/jwsjwkhmacSinglePart"; - BookStore bs = createJwsBookStoreHMac(address, true); + BookStore bs = createJwsBookStoreHMac(address, true, false); + Book book = bs.echoBookMultipart(new Book("book", 123L)); + assertEquals("book", book.getName()); + assertEquals(123L, book.getId()); + } + + @Test + public void testJwsJwkBookHMacMultipartJwsJson() throws Exception { + String address = "https://localhost:" + PORT + "/jwsjwkhmacSinglePartJwsJson"; + BookStore bs = createJwsBookStoreHMac(address, true, true); Book book = bs.echoBookMultipart(new Book("book", 123L)); assertEquals("book", book.getName()); assertEquals(123L, book.getId()); @@ -83,7 +92,7 @@ public class JAXRSJwsMultipartTest extends AbstractBusClientServerTestBase { @Test public void testJwsJwkBooksHMacMultipart() throws Exception { String address = "https://localhost:" + PORT + "/jwsjwkhmacManyParts"; - BookStore bs = createJwsBookStoreHMac(address, false); + BookStore bs = createJwsBookStoreHMac(address, false, false); List<Book> books = new LinkedList<Book>(); books.add(new Book("book", 123L)); books.add(new Book("book2", 124L)); @@ -96,7 +105,7 @@ public class JAXRSJwsMultipartTest extends AbstractBusClientServerTestBase { @Test(expected = ProcessingException.class) public void testJwsJwkBooksHMacMultipartClientRestriction() throws Exception { String address = "https://localhost:" + PORT + "/jwsjwkhmacManyParts"; - BookStore bs = createJwsBookStoreHMac(address, true); + BookStore bs = createJwsBookStoreHMac(address, true, false); List<Book> books = new LinkedList<Book>(); books.add(new Book("book", 123L)); books.add(new Book("book2", 124L)); @@ -105,7 +114,7 @@ public class JAXRSJwsMultipartTest extends AbstractBusClientServerTestBase { @Test(expected = BadRequestException.class) public void testJwsJwkBooksHMacMultipartServerRestriction() throws Exception { String address = "https://localhost:" + PORT + "/jwsjwkhmacSinglePart"; - BookStore bs = createJwsBookStoreHMac(address, false); + BookStore bs = createJwsBookStoreHMac(address, false, false); List<Book> books = new LinkedList<Book>(); books.add(new Book("book", 123L)); books.add(new Book("book2", 124L)); @@ -122,7 +131,7 @@ public class JAXRSJwsMultipartTest extends AbstractBusClientServerTestBase { @Test public void testJwsJwkBookHMacMultipartModified() throws Exception { String address = "https://localhost:" + PORT + "/jwsjwkhmacSinglePartModified"; - BookStore bs = createJwsBookStoreHMac(address, true); + BookStore bs = createJwsBookStoreHMac(address, true, false); try { bs.echoBookMultipart(new Book("book", 123L)); fail("Exception is expected"); @@ -130,20 +139,24 @@ public class JAXRSJwsMultipartTest extends AbstractBusClientServerTestBase { // expected } } - private BookStore createJwsBookStoreHMac(String address, boolean supportSinglePart) throws Exception { - JAXRSClientFactoryBean bean = createJAXRSClientFactoryBean(address, supportSinglePart); + private BookStore createJwsBookStoreHMac(String address, + boolean supportSinglePart, + boolean useJwsJsonSignatureFormat) throws Exception { + JAXRSClientFactoryBean bean = createJAXRSClientFactoryBean(address, supportSinglePart, + useJwsJsonSignatureFormat); bean.getProperties(true).put("rs.security.signature.properties", "org/apache/cxf/systest/jaxrs/security/secret.jwk.properties"); return bean.create(BookStore.class); } private BookStore createJwsBookStoreRSA(String address, boolean supportSinglePart) throws Exception { - JAXRSClientFactoryBean bean = createJAXRSClientFactoryBean(address, supportSinglePart); + JAXRSClientFactoryBean bean = createJAXRSClientFactoryBean(address, supportSinglePart, false); bean.getProperties(true).put("rs.security.signature.properties", "org/apache/cxf/systest/jaxrs/security/alice.jwk.properties"); return bean.create(BookStore.class); } private JAXRSClientFactoryBean createJAXRSClientFactoryBean(String address, - boolean supportSinglePart) throws Exception { + boolean supportSinglePart, + boolean useJwsJsonSignatureFormat) throws Exception { JAXRSClientFactoryBean bean = new JAXRSClientFactoryBean(); SpringBusFactory bf = new SpringBusFactory(); URL busFile = JAXRSJwsMultipartTest.class.getResource("client.xml"); @@ -154,6 +167,7 @@ public class JAXRSJwsMultipartTest extends AbstractBusClientServerTestBase { List<Object> providers = new LinkedList<Object>(); JwsMultipartClientRequestFilter outFilter = new JwsMultipartClientRequestFilter(); outFilter.setSupportSinglePartOnly(supportSinglePart); + outFilter.setUseJwsJsonSignatureFormat(useJwsJsonSignatureFormat); providers.add(outFilter); JwsMultipartClientResponseFilter inFilter = new JwsMultipartClientResponseFilter(); inFilter.setSupportSinglePartOnly(supportSinglePart); http://git-wip-us.apache.org/repos/asf/cxf/blob/2f25e4d7/systests/rs-security/src/test/resources/org/apache/cxf/systest/jaxrs/security/jose/jwejws/serverMultipart.xml ---------------------------------------------------------------------- diff --git a/systests/rs-security/src/test/resources/org/apache/cxf/systest/jaxrs/security/jose/jwejws/serverMultipart.xml b/systests/rs-security/src/test/resources/org/apache/cxf/systest/jaxrs/security/jose/jwejws/serverMultipart.xml index 0a2a3b4..77291bf 100644 --- a/systests/rs-security/src/test/resources/org/apache/cxf/systest/jaxrs/security/jose/jwejws/serverMultipart.xml +++ b/systests/rs-security/src/test/resources/org/apache/cxf/systest/jaxrs/security/jose/jwejws/serverMultipart.xml @@ -40,6 +40,9 @@ under the License. <bean id="serviceBean" class="org.apache.cxf.systest.jaxrs.security.jose.BookStore"/> <bean id="jwsInMultipartFilter" class="org.apache.cxf.rs.security.jose.jaxrs.multipart.JwsMultipartContainerRequestFilter"/> + <bean id="jwsInMultipartFilterJwsJson" class="org.apache.cxf.rs.security.jose.jaxrs.multipart.JwsMultipartContainerRequestFilter"> + <property name="useJwsJsonSignatureFormat" value="true"/> + </bean> <bean id="jwsOutMultipartFilter" class="org.apache.cxf.rs.security.jose.jaxrs.multipart.JwsMultipartContainerResponseFilter"/> <bean id="jwsDetachedSignatureWriter" class="org.apache.cxf.rs.security.jose.jaxrs.JwsDetachedSignatureProvider"/> <bean id="jwsInMultipartModificationFilter" class="org.apache.cxf.systest.jaxrs.security.jose.jwejws.MultipartModificationFilter"/> @@ -63,6 +66,19 @@ under the License. <entry key="rs.security.signature.properties" value="org/apache/cxf/systest/jaxrs/security/secret.jwk.properties"/> </jaxrs:properties> </jaxrs:server> + <jaxrs:server address="https://localhost:${testutil.ports.jaxrs-jws-multipart}/jwsjwkhmacSinglePartJwsJson"> + <jaxrs:serviceBeans> + <ref bean="serviceBean"/> + </jaxrs:serviceBeans> + <jaxrs:providers> + <ref bean="jwsInMultipartFilterJwsJson"/> + <ref bean="jwsOutMultipartFilter"/> + <ref bean="jwsDetachedSignatureWriter"/> + </jaxrs:providers> + <jaxrs:properties> + <entry key="rs.security.signature.properties" value="org/apache/cxf/systest/jaxrs/security/secret.jwk.properties"/> + </jaxrs:properties> + </jaxrs:server> <jaxrs:server address="https://localhost:${testutil.ports.jaxrs-jws-multipart}/jwsjwkrsaSinglePart"> <jaxrs:serviceBeans> <ref bean="serviceBean"/>
