Index: modules/testsuite/cxf-tests/scripts/cxf-samples-jaxws.xml =================================================================== --- modules/testsuite/cxf-tests/scripts/cxf-samples-jaxws.xml (revision 11981) +++ modules/testsuite/cxf-tests/scripts/cxf-samples-jaxws.xml (working copy) @@ -184,6 +184,23 @@ + + + + + + + + + + + + + + + emptyMap()); + } + + public SubjectCreatingInterceptor(Map properties) + { + super(properties); + SPIProvider spiProvider = SPIProviderResolver.getInstance().getProvider(); + secAdaptorFactory = spiProvider.getSPI(SecurityAdaptorFactory.class); + } + + @Override + public Subject createSubject(String name, String password, boolean isDigest, + String nonce, String created) + { + // Load AuthenticationManager + // TODO : use PicketBox API + + AuthenticationManagerLoader aml = null; + try + { + aml = AuthenticationManagerLoader.class.newInstance(); + } + catch (Exception ex) + { + String msg = "AuthenticationManager can nont be loaded"; + log.error(msg); + throw new SecurityException(msg); + } + + AuthenticationManager am = aml.getManager(); + + // verify timestamp and nonce if digest + if (isDigest) + { + verifyUsernameToken(nonce, created); + // CallbackHandler cb = new UsernameTokenCallbackHandler(nonce, created); + // CallbackHandlerPolicyContextHandler.setCaallbackHandler(cb); + } + + // authenticate and populate Subject + + Principal principal = new SimplePrincipal(name); + Subject subject = new Subject(); + + boolean TRACE = log.isTraceEnabled(); + if (TRACE) + log.trace("About to authenticate, using security domain '" + am.getSecurityDomain() + "'"); + + if (am.isValid(principal, password, subject) == false) + { + String msg = "Authentication failed, principal=" + principal.getName(); + log.error(msg); + throw new SecurityException(msg); + } + + // push subject on the thread local storage + SecurityAdaptor adaptor = secAdaptorFactory.newSecurityAdapter(); + adaptor.setPrincipal(principal); + adaptor.setCredential(password); + adaptor.pushSubjectContext(subject, principal, password); + + if (TRACE) + log.trace("Authenticated, principal=" + name); + + return subject; + } + + + private void verifyUsernameToken(String nonce, String created) + { + if (created != null) + { + Calendar cal = SimpleTypeBindings.unmarshalDateTime(created); + Calendar ref = Calendar.getInstance(); + ref.add(Calendar.SECOND, -TIMESTAMP_FRESHNESS_THRESHOLD); + if (ref.after(cal)) + throw new SecurityException("Request rejected since a stale timestamp has been provided: " + created); + } + + // if (nonce != null) + // { + // if (nonceStore.hasNonce(nonce)) + throw new SecurityException("Request rejected since a message with the same nonce has been recently received; nonce = " + nonce); + // } + } +} + Property changes on: modules\testsuite\cxf-tests\src\test\java\org\jboss\test\ws\jaxws\samples\wsse\SubjectCreatingInterceptor.java ___________________________________________________________________ Added: svn:keywords + Rev Date Added: svn:eol-style + native Index: modules/testsuite/cxf-tests/src/test/java/org/jboss/test/ws/jaxws/samples/wsse/UsernameAuthorizationTestCase.java =================================================================== --- modules/testsuite/cxf-tests/src/test/java/org/jboss/test/ws/jaxws/samples/wsse/UsernameAuthorizationTestCase.java (revision 0) +++ modules/testsuite/cxf-tests/src/test/java/org/jboss/test/ws/jaxws/samples/wsse/UsernameAuthorizationTestCase.java (revision 0) @@ -0,0 +1,96 @@ +/* + * JBoss, Home of Professional Open Source. + * Copyright 2006, Red Hat Middleware LLC, and individual contributors + * as indicated by the @author tags. See the copyright.txt file in the + * distribution for a full listing of individual contributors. + * + * This is free software; you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This software is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this software; if not, write to the Free + * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA + * 02110-1301 USA, or see the FSF site: http://www.fsf.org. + */ +package org.jboss.test.ws.jaxws.samples.wsse; + +import java.net.URL; +import java.util.HashMap; +import java.util.Map; + +import javax.xml.namespace.QName; +import javax.xml.ws.Service; + +import junit.framework.Test; + +import org.apache.cxf.binding.soap.saaj.SAAJOutInterceptor; +import org.apache.cxf.endpoint.Client; +import org.apache.cxf.endpoint.Endpoint; +import org.apache.cxf.frontend.ClientProxy; +import org.apache.cxf.ws.security.wss4j.WSS4JOutInterceptor; +import org.jboss.wsf.test.JBossWSTest; +import org.jboss.wsf.test.JBossWSTestSetup; + +/** + * WS-Security username authorization test case + * + */ +public final class UsernameAuthorizationTestCase extends JBossWSTest +{ + private final String serviceURL = "http://" + getServerHost() + ":8080/jaxws-samples-wsse-username-authorize"; + + public static Test suite() + { + return new JBossWSTestSetup(UsernameAuthorizationTestCase.class,"jaxws-samples-wsse-username-authorize.war"); + } + + public void testAuthorized() throws Exception + { + QName serviceName = new QName("http://www.jboss.org/jbossws/ws-extensions/wssecurity", "SecurityService"); + URL wsdlURL = new URL(serviceURL + "?wsdl"); + Service service = Service.create(wsdlURL, serviceName); + ServiceIface proxy = (ServiceIface)service.getPort(ServiceIface.class); + setupWsse(proxy, "kermit"); + assertEquals("Secure Hello World!", proxy.sayHello()); + } + + public void testUnauthorized() throws Exception + { + QName serviceName = new QName("http://www.jboss.org/jbossws/ws-extensions/wssecurity", "SecurityService"); + URL wsdlURL = new URL(serviceURL + "?wsdl"); + Service service = Service.create(wsdlURL, serviceName); + ServiceIface proxy = (ServiceIface)service.getPort(ServiceIface.class); + setupWsse(proxy, "kermit"); + try + { + proxy.greetMe(); + fail("User kermit should not be authorized to invoke greetMe."); + } + catch (Exception ex) + { + assertEquals("Unauthorized", ex.getMessage()); + } + } + + private void setupWsse(ServiceIface proxy, String username) + { + Client client = ClientProxy.getClient(proxy); + Endpoint cxfEndpoint = client.getEndpoint(); + + Map outProps = new HashMap(); + outProps.put("action", "UsernameToken"); + outProps.put("user", username); + outProps.put("passwordType", "PasswordText"); + outProps.put("passwordCallbackClass", "org.jboss.test.ws.jaxws.samples.wsse.UsernamePasswordCallback"); + WSS4JOutInterceptor wssOut = new WSS4JOutInterceptor(outProps); //request + cxfEndpoint.getOutInterceptors().add(wssOut); + cxfEndpoint.getOutInterceptors().add(new SAAJOutInterceptor()); + } +} Property changes on: modules\testsuite\cxf-tests\src\test\java\org\jboss\test\ws\jaxws\samples\wsse\UsernameAuthorizationTestCase.java ___________________________________________________________________ Added: svn:keywords + Rev Date Added: svn:eol-style + native Index: modules/testsuite/cxf-tests/src/test/resources/jaxws/samples/wsse/username-authorize/WEB-INF/jboss-web.xml =================================================================== --- modules/testsuite/cxf-tests/src/test/resources/jaxws/samples/wsse/username-authorize/WEB-INF/jboss-web.xml (revision 0) +++ modules/testsuite/cxf-tests/src/test/resources/jaxws/samples/wsse/username-authorize/WEB-INF/jboss-web.xml (revision 0) @@ -0,0 +1,7 @@ + + + + + + java:/jaas/JBossWS + Property changes on: modules\testsuite\cxf-tests\src\test\resources\jaxws\samples\wsse\username-authorize\WEB-INF\jboss-web.xml ___________________________________________________________________ Added: svn:mime-type + text/xml Added: svn:keywords + Rev Date Added: svn:eol-style + native Index: modules/testsuite/cxf-tests/src/test/resources/jaxws/samples/wsse/username-authorize/WEB-INF/jbossws-cxf.xml =================================================================== --- modules/testsuite/cxf-tests/src/test/resources/jaxws/samples/wsse/username-authorize/WEB-INF/jbossws-cxf.xml (revision 0) +++ modules/testsuite/cxf-tests/src/test/resources/jaxws/samples/wsse/username-authorize/WEB-INF/jbossws-cxf.xml (revision 0) @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Property changes on: modules\testsuite\cxf-tests\src\test\resources\jaxws\samples\wsse\username-authorize\WEB-INF\jbossws-cxf.xml ___________________________________________________________________ Added: svn:mime-type + text/xml Added: svn:keywords + Rev Date Added: svn:eol-style + native Index: modules/testsuite/cxf-tests/src/test/resources/jaxws/samples/wsse/username-authorize/WEB-INF/web.xml =================================================================== --- modules/testsuite/cxf-tests/src/test/resources/jaxws/samples/wsse/username-authorize/WEB-INF/web.xml (revision 0) +++ modules/testsuite/cxf-tests/src/test/resources/jaxws/samples/wsse/username-authorize/WEB-INF/web.xml (revision 0) @@ -0,0 +1,15 @@ + + + + + TestService + org.jboss.test.ws.jaxws.samples.wsse.ServiceImpl + + + TestService + /* + + Property changes on: modules\testsuite\cxf-tests\src\test\resources\jaxws\samples\wsse\username-authorize\WEB-INF\web.xml ___________________________________________________________________ Added: svn:mime-type + text/xml Added: svn:keywords + Rev Date Added: svn:eol-style + native Index: modules/testsuite/cxf-tests/src/test/resources/jaxws/samples/wsse/username-authorize/WEB-INF/wsdl/SecurityService.wsdl =================================================================== --- modules/testsuite/cxf-tests/src/test/resources/jaxws/samples/wsse/username-authorize/WEB-INF/wsdl/SecurityService.wsdl (revision 0) +++ modules/testsuite/cxf-tests/src/test/resources/jaxws/samples/wsse/username-authorize/WEB-INF/wsdl/SecurityService.wsdl (revision 0) @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Property changes on: modules\testsuite\cxf-tests\src\test\resources\jaxws\samples\wsse\username-authorize\WEB-INF\wsdl\SecurityService.wsdl ___________________________________________________________________ Added: svn:mime-type + text/xml Added: svn:keywords + Rev Date Added: svn:eol-style + native Index: modules/testsuite/cxf-tests/src/test/resources/jaxws/samples/wsse/username-authorize/WEB-INF/wsdl/SecurityService_schema1.xsd =================================================================== --- modules/testsuite/cxf-tests/src/test/resources/jaxws/samples/wsse/username-authorize/WEB-INF/wsdl/SecurityService_schema1.xsd (revision 0) +++ modules/testsuite/cxf-tests/src/test/resources/jaxws/samples/wsse/username-authorize/WEB-INF/wsdl/SecurityService_schema1.xsd (revision 0) @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Property changes on: modules\testsuite\cxf-tests\src\test\resources\jaxws\samples\wsse\username-authorize\WEB-INF\wsdl\SecurityService_schema1.xsd ___________________________________________________________________ Added: svn:mime-type + text/xml Added: svn:keywords + Rev Date Added: svn:eol-style + native Index: pom.xml =================================================================== --- pom.xml (revision 11981) +++ pom.xml (working copy) @@ -55,7 +55,7 @@ 3.2.1.GA --> - 2.2.6 + 2.2.8-SNAPSHOT 1.0.1 2.2.3 1.2.7