You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by co...@apache.org on 2016/01/20 16:02:17 UTC

[2/5] cxf git commit: Reshuffle of the tests to share some common code

http://git-wip-us.apache.org/repos/asf/cxf/blob/2e8219cf/systests/rs-security/src/test/java/org/apache/cxf/systest/jaxrs/security/oauth2/filters/OAuth2FiltersTest.java
----------------------------------------------------------------------
diff --git a/systests/rs-security/src/test/java/org/apache/cxf/systest/jaxrs/security/oauth2/filters/OAuth2FiltersTest.java b/systests/rs-security/src/test/java/org/apache/cxf/systest/jaxrs/security/oauth2/filters/OAuth2FiltersTest.java
index e69ab9c..f79ba49 100644
--- a/systests/rs-security/src/test/java/org/apache/cxf/systest/jaxrs/security/oauth2/filters/OAuth2FiltersTest.java
+++ b/systests/rs-security/src/test/java/org/apache/cxf/systest/jaxrs/security/oauth2/filters/OAuth2FiltersTest.java
@@ -20,20 +20,14 @@
 package org.apache.cxf.systest.jaxrs.security.oauth2.filters;
 
 import java.net.URL;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
 import java.util.UUID;
 
-import javax.ws.rs.core.Form;
 import javax.ws.rs.core.Response;
 
 import org.apache.cxf.jaxrs.client.WebClient;
-import org.apache.cxf.jaxrs.provider.json.JSONProvider;
 import org.apache.cxf.rs.security.oauth2.common.ClientAccessToken;
-import org.apache.cxf.rs.security.oauth2.common.OAuthAuthorizationData;
-import org.apache.cxf.rs.security.oauth2.provider.OAuthJSONProvider;
 import org.apache.cxf.systest.jaxrs.security.Book;
+import org.apache.cxf.systest.jaxrs.security.oauth2.common.OAuth2TestUtils;
 import org.apache.cxf.testutil.common.AbstractBusClientServerTestBase;
 import org.junit.BeforeClass;
 
@@ -59,28 +53,30 @@ public class OAuth2FiltersTest extends AbstractBusClientServerTestBase {
         // Get Authorization Code
         String oauthService = "https://localhost:" + OAUTH_PORT + "/services/";
 
-        WebClient oauthClient = WebClient.create(oauthService, setupProviders(), "alice", 
-                                                 "security", busFile.toString());
+        WebClient oauthClient = WebClient.create(oauthService, OAuth2TestUtils.setupProviders(), 
+                                                 "alice", "security", busFile.toString());
         // Save the Cookie for the second request...
         WebClient.getConfig(oauthClient).getRequestContext().put(
             org.apache.cxf.message.Message.MAINTAIN_SESSION, Boolean.TRUE);
 
-        String code = getAuthorizationCode(oauthClient);
+        String code = OAuth2TestUtils.getAuthorizationCode(oauthClient);
         assertNotNull(code);
         
         // Now get the access token
-        oauthClient = WebClient.create(oauthService, setupProviders(), "consumer-id", 
-                                       "this-is-a-secret", busFile.toString());
+        oauthClient = WebClient.create(oauthService, OAuth2TestUtils.setupProviders(), 
+                                       "consumer-id", "this-is-a-secret", busFile.toString());
         // Save the Cookie for the second request...
         WebClient.getConfig(oauthClient).getRequestContext().put(
             org.apache.cxf.message.Message.MAINTAIN_SESSION, Boolean.TRUE);
 
-        ClientAccessToken accessToken = getAccessTokenWithAuthorizationCode(oauthClient, code);
+        ClientAccessToken accessToken = 
+            OAuth2TestUtils.getAccessTokenWithAuthorizationCode(oauthClient, code);
         assertNotNull(accessToken.getTokenKey());
 
         // Now invoke on the service with the access token
         String address = "https://localhost:" + PORT + "/secured/bookstore/books";
-        WebClient client = WebClient.create(address, setupProviders(), busFile.toString());
+        WebClient client = WebClient.create(address, OAuth2TestUtils.setupProviders(), 
+                                            busFile.toString());
         client.header("Authorization", "Bearer " + accessToken.getTokenKey());
         
         Response response = client.post(new Book("book", 123L));
@@ -97,7 +93,8 @@ public class OAuth2FiltersTest extends AbstractBusClientServerTestBase {
         
         // Now invoke on the service with the faked access token
         String address = "https://localhost:" + PORT + "/secured/bookstore/books";
-        WebClient client = WebClient.create(address, setupProviders(), busFile.toString());
+        WebClient client = WebClient.create(address, OAuth2TestUtils.setupProviders(), 
+                                            busFile.toString());
         client.header("Authorization", "Bearer " + UUID.randomUUID().toString());
         
         Response response = client.post(new Book("book", 123L));
@@ -110,7 +107,8 @@ public class OAuth2FiltersTest extends AbstractBusClientServerTestBase {
         
         // Now invoke on the service with the faked access token
         String address = "https://localhost:" + PORT + "/secured/bookstore/books";
-        WebClient client = WebClient.create(address, setupProviders(), busFile.toString());
+        WebClient client = WebClient.create(address, OAuth2TestUtils.setupProviders(), 
+                                            busFile.toString());
         
         Response response = client.post(new Book("book", 123L));
         assertNotEquals(response.getStatus(), 200);
@@ -122,7 +120,8 @@ public class OAuth2FiltersTest extends AbstractBusClientServerTestBase {
         
         // Now invoke on the service with the faked access token
         String address = "https://localhost:" + PORT + "/secured/bookstore/books";
-        WebClient client = WebClient.create(address, setupProviders(), busFile.toString());
+        WebClient client = WebClient.create(address, OAuth2TestUtils.setupProviders(), 
+                                            busFile.toString());
         client.header("Authorization", "Bearer ");
         
         Response response = client.post(new Book("book", 123L));
@@ -136,28 +135,30 @@ public class OAuth2FiltersTest extends AbstractBusClientServerTestBase {
         // Get Authorization Code
         String oauthService = "https://localhost:" + OAUTH_PORT + "/services/";
 
-        WebClient oauthClient = WebClient.create(oauthService, setupProviders(), "alice", 
-                                                 "security", busFile.toString());
+        WebClient oauthClient = WebClient.create(oauthService, OAuth2TestUtils.setupProviders(), 
+                                                 "alice", "security", busFile.toString());
         // Save the Cookie for the second request...
         WebClient.getConfig(oauthClient).getRequestContext().put(
             org.apache.cxf.message.Message.MAINTAIN_SESSION, Boolean.TRUE);
 
-        String code = getAuthorizationCode(oauthClient, "create_book");
+        String code = OAuth2TestUtils.getAuthorizationCode(oauthClient, "create_book");
         assertNotNull(code);
         
         // Now get the access token
-        oauthClient = WebClient.create(oauthService, setupProviders(), "consumer-id", 
-                                       "this-is-a-secret", busFile.toString());
+        oauthClient = WebClient.create(oauthService, OAuth2TestUtils.setupProviders(), 
+                                       "consumer-id", "this-is-a-secret", busFile.toString());
         // Save the Cookie for the second request...
         WebClient.getConfig(oauthClient).getRequestContext().put(
             org.apache.cxf.message.Message.MAINTAIN_SESSION, Boolean.TRUE);
 
-        ClientAccessToken accessToken = getAccessTokenWithAuthorizationCode(oauthClient, code);
+        ClientAccessToken accessToken = 
+            OAuth2TestUtils.getAccessTokenWithAuthorizationCode(oauthClient, code);
         assertNotNull(accessToken.getTokenKey());
 
         // Now invoke on the service with the access token
         String address = "https://localhost:" + PORT + "/secured/bookstore/books";
-        WebClient client = WebClient.create(address, setupProviders(), busFile.toString());
+        WebClient client = WebClient.create(address, OAuth2TestUtils.setupProviders(),
+                                            busFile.toString());
         client.header("Authorization", "Bearer " + accessToken.getTokenKey());
         
         Response response = client.post(new Book("book", 123L));
@@ -175,28 +176,30 @@ public class OAuth2FiltersTest extends AbstractBusClientServerTestBase {
         // Get Authorization Code
         String oauthService = "https://localhost:" + OAUTH_PORT + "/services/";
 
-        WebClient oauthClient = WebClient.create(oauthService, setupProviders(), "alice", 
-                                                 "security", busFile.toString());
+        WebClient oauthClient = WebClient.create(oauthService, OAuth2TestUtils.setupProviders(), 
+                                                 "alice", "security", busFile.toString());
         // Save the Cookie for the second request...
         WebClient.getConfig(oauthClient).getRequestContext().put(
             org.apache.cxf.message.Message.MAINTAIN_SESSION, Boolean.TRUE);
 
-        String code = getAuthorizationCode(oauthClient, "read_book");
+        String code = OAuth2TestUtils.getAuthorizationCode(oauthClient, "read_book");
         assertNotNull(code);
         
         // Now get the access token
-        oauthClient = WebClient.create(oauthService, setupProviders(), "consumer-id", 
-                                       "this-is-a-secret", busFile.toString());
+        oauthClient = WebClient.create(oauthService, OAuth2TestUtils.setupProviders(), 
+                                       "consumer-id", "this-is-a-secret", busFile.toString());
         // Save the Cookie for the second request...
         WebClient.getConfig(oauthClient).getRequestContext().put(
             org.apache.cxf.message.Message.MAINTAIN_SESSION, Boolean.TRUE);
 
-        ClientAccessToken accessToken = getAccessTokenWithAuthorizationCode(oauthClient, code);
+        ClientAccessToken accessToken = 
+            OAuth2TestUtils.getAccessTokenWithAuthorizationCode(oauthClient, code);
         assertNotNull(accessToken.getTokenKey());
 
         // Now invoke on the service with the access token
         String address = "https://localhost:" + PORT + "/secured/bookstore/books";
-        WebClient client = WebClient.create(address, setupProviders(), busFile.toString());
+        WebClient client = WebClient.create(address, OAuth2TestUtils.setupProviders(), 
+                                            busFile.toString());
         client.header("Authorization", "Bearer " + accessToken.getTokenKey());
 
         // We don't have the scope to post a book here
@@ -211,28 +214,30 @@ public class OAuth2FiltersTest extends AbstractBusClientServerTestBase {
         // Get Authorization Code
         String oauthService = "https://localhost:" + OAUTH_PORT + "/services/";
 
-        WebClient oauthClient = WebClient.create(oauthService, setupProviders(), "alice", 
-                                                 "security", busFile.toString());
+        WebClient oauthClient = WebClient.create(oauthService, OAuth2TestUtils.setupProviders(), 
+                                                 "alice", "security", busFile.toString());
         // Save the Cookie for the second request...
         WebClient.getConfig(oauthClient).getRequestContext().put(
             org.apache.cxf.message.Message.MAINTAIN_SESSION, Boolean.TRUE);
 
-        String code = getAuthorizationCode(oauthClient, "create_image");
+        String code = OAuth2TestUtils.getAuthorizationCode(oauthClient, "create_image");
         assertNotNull(code);
         
         // Now get the access token
-        oauthClient = WebClient.create(oauthService, setupProviders(), "consumer-id", 
-                                       "this-is-a-secret", busFile.toString());
+        oauthClient = WebClient.create(oauthService, OAuth2TestUtils.setupProviders(), 
+                                       "consumer-id", "this-is-a-secret", busFile.toString());
         // Save the Cookie for the second request...
         WebClient.getConfig(oauthClient).getRequestContext().put(
             org.apache.cxf.message.Message.MAINTAIN_SESSION, Boolean.TRUE);
 
-        ClientAccessToken accessToken = getAccessTokenWithAuthorizationCode(oauthClient, code);
+        ClientAccessToken accessToken = 
+            OAuth2TestUtils.getAccessTokenWithAuthorizationCode(oauthClient, code);
         assertNotNull(accessToken.getTokenKey());
 
         // Now invoke on the service with the access token
         String address = "https://localhost:" + PORT + "/secured/bookstore/books";
-        WebClient client = WebClient.create(address, setupProviders(), busFile.toString());
+        WebClient client = WebClient.create(address, OAuth2TestUtils.setupProviders(), 
+                                            busFile.toString());
         client.header("Authorization", "Bearer " + accessToken.getTokenKey());
 
         // We don't have the scope to post a book here
@@ -247,28 +252,31 @@ public class OAuth2FiltersTest extends AbstractBusClientServerTestBase {
         // Get Authorization Code
         String oauthService = "https://localhost:" + OAUTH_PORT + "/services/";
 
-        WebClient oauthClient = WebClient.create(oauthService, setupProviders(), "alice", 
-                                                 "security", busFile.toString());
+        WebClient oauthClient = WebClient.create(oauthService, OAuth2TestUtils.setupProviders(), 
+                                                 "alice", "security", busFile.toString());
         // Save the Cookie for the second request...
         WebClient.getConfig(oauthClient).getRequestContext().put(
             org.apache.cxf.message.Message.MAINTAIN_SESSION, Boolean.TRUE);
 
-        String code = getAuthorizationCode(oauthClient, "read_book create_image create_book");
+        String code = OAuth2TestUtils.getAuthorizationCode(oauthClient, 
+                                                           "read_book create_image create_book");
         assertNotNull(code);
         
         // Now get the access token
-        oauthClient = WebClient.create(oauthService, setupProviders(), "consumer-id", 
-                                       "this-is-a-secret", busFile.toString());
+        oauthClient = WebClient.create(oauthService, OAuth2TestUtils.setupProviders(), 
+                                       "consumer-id", "this-is-a-secret", busFile.toString());
         // Save the Cookie for the second request...
         WebClient.getConfig(oauthClient).getRequestContext().put(
             org.apache.cxf.message.Message.MAINTAIN_SESSION, Boolean.TRUE);
 
-        ClientAccessToken accessToken = getAccessTokenWithAuthorizationCode(oauthClient, code);
+        ClientAccessToken accessToken = 
+            OAuth2TestUtils.getAccessTokenWithAuthorizationCode(oauthClient, code);
         assertNotNull(accessToken.getTokenKey());
 
         // Now invoke on the service with the access token
         String address = "https://localhost:" + PORT + "/secured/bookstore/books";
-        WebClient client = WebClient.create(address, setupProviders(), busFile.toString());
+        WebClient client = WebClient.create(address, OAuth2TestUtils.setupProviders(), 
+                                            busFile.toString());
         client.header("Authorization", "Bearer " + accessToken.getTokenKey());
         
         Response response = client.post(new Book("book", 123L));
@@ -279,75 +287,4 @@ public class OAuth2FiltersTest extends AbstractBusClientServerTestBase {
         assertEquals(returnedBook.getId(), 123L);
     }
 
-    private List<Object> setupProviders() {
-        List<Object> providers = new ArrayList<Object>();
-        JSONProvider<OAuthAuthorizationData> jsonP = new JSONProvider<OAuthAuthorizationData>();
-        jsonP.setNamespaceMap(Collections.singletonMap("http://org.apache.cxf.rs.security.oauth",
-                                                       "ns2"));
-        providers.add(jsonP);
-        OAuthJSONProvider oauthProvider = new OAuthJSONProvider();
-        providers.add(oauthProvider);
-        
-        return providers;
-    }
-    
-    private String getAuthorizationCode(WebClient client) {
-        return getAuthorizationCode(client, null);
-    }
-
-    private String getAuthorizationCode(WebClient client, String scope) {
-        // Make initial authorization request
-        client.type("application/json").accept("application/json");
-        client.query("client_id", "consumer-id");
-        client.query("redirect_uri", "http://www.blah.apache.org");
-        client.query("response_type", "code");
-        if (scope != null) {
-            client.query("scope", scope);
-        }
-        client.path("authorize/");
-        Response response = client.get();
-
-        OAuthAuthorizationData authzData = response.readEntity(OAuthAuthorizationData.class);
-
-        // Now call "decision" to get the authorization code grant
-        client.path("decision");
-        client.type("application/x-www-form-urlencoded");
-
-        Form form = new Form();
-        form.param("session_authenticity_token", authzData.getAuthenticityToken());
-        form.param("client_id", authzData.getClientId());
-        form.param("redirect_uri", authzData.getRedirectUri());
-        if (authzData.getProposedScope() != null) {
-            form.param("scope", authzData.getProposedScope());
-        }
-        form.param("oauthDecision", "allow");
-
-        response = client.post(form);
-        String location = response.getHeaderString("Location"); 
-        return getSubstring(location, "code");
-    }
-    
-    private ClientAccessToken getAccessTokenWithAuthorizationCode(WebClient client, String code) {
-        client.type("application/x-www-form-urlencoded").accept("application/json");
-        client.path("token");
-
-        Form form = new Form();
-        form.param("grant_type", "authorization_code");
-        form.param("code", code);
-        form.param("client_id", "consumer-id");
-        Response response = client.post(form);
-
-        return response.readEntity(ClientAccessToken.class);
-    }
-    
-    private String getSubstring(String parentString, String substringName) {
-        String foundString = 
-            parentString.substring(parentString.indexOf(substringName + "=") + (substringName + "=").length());
-        int ampersandIndex = foundString.indexOf('&');
-        if (ampersandIndex < 1) {
-            ampersandIndex = foundString.length();
-        }
-        return foundString.substring(0, ampersandIndex);
-    }
-
 }

http://git-wip-us.apache.org/repos/asf/cxf/blob/2e8219cf/systests/rs-security/src/test/java/org/apache/cxf/systest/jaxrs/security/oauth2/filters/OAuthDataProviderImpl.java
----------------------------------------------------------------------
diff --git a/systests/rs-security/src/test/java/org/apache/cxf/systest/jaxrs/security/oauth2/filters/OAuthDataProviderImpl.java b/systests/rs-security/src/test/java/org/apache/cxf/systest/jaxrs/security/oauth2/filters/OAuthDataProviderImpl.java
deleted file mode 100644
index 0426806..0000000
--- a/systests/rs-security/src/test/java/org/apache/cxf/systest/jaxrs/security/oauth2/filters/OAuthDataProviderImpl.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.cxf.systest.jaxrs.security.oauth2.filters;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-
-import org.apache.cxf.rs.security.oauth2.common.Client;
-import org.apache.cxf.rs.security.oauth2.common.OAuthPermission;
-import org.apache.cxf.rs.security.oauth2.grants.code.DefaultEHCacheCodeDataProvider;
-import org.apache.cxf.rs.security.oauth2.provider.OAuthServiceException;
-
-/**
- * Extend the DefaultEHCacheCodeDataProvider to allow refreshing of tokens
- */
-public class OAuthDataProviderImpl extends DefaultEHCacheCodeDataProvider {
-    
-    public OAuthDataProviderImpl() {
-        Client client = new Client("consumer-id", "this-is-a-secret", true);
-        client.setRedirectUris(Collections.singletonList("http://www.blah.apache.org"));
-        
-        client.getAllowedGrantTypes().add("authorization_code");
-        client.getAllowedGrantTypes().add("refresh_token");
-        client.getAllowedGrantTypes().add("implicit");
-        
-        client.getRegisteredScopes().add("read_book");
-        client.getRegisteredScopes().add("create_book");
-        client.getRegisteredScopes().add("create_image");
-        
-        this.setClient(client);
-    }
-    
-    @Override
-    protected boolean isRefreshTokenSupported(List<String> theScopes) {
-        return true;
-    }
-    
-    @Override
-    public List<OAuthPermission> convertScopeToPermissions(Client client, List<String> requestedScopes) {
-        if (requestedScopes.isEmpty()) {
-            return Collections.emptyList();
-        }
-        
-        List<OAuthPermission> permissions = new ArrayList<>();
-        for (String requestedScope : requestedScopes) {
-            if ("read_book".equals(requestedScope)) {
-                OAuthPermission permission = new OAuthPermission();
-                permission.setHttpVerbs(Collections.singletonList("GET"));
-                List<String> uris = new ArrayList<>();
-                String partnerAddress = "/secured/bookstore/books/*";
-                uris.add(partnerAddress);
-                permission.setUris(uris);
-                
-                permissions.add(permission);
-            } else if ("create_book".equals(requestedScope)) {
-                OAuthPermission permission = new OAuthPermission();
-                permission.setHttpVerbs(Collections.singletonList("POST"));
-                List<String> uris = new ArrayList<>();
-                String partnerAddress = "/secured/bookstore/books/*";
-                uris.add(partnerAddress);
-                permission.setUris(uris);
-                
-                permissions.add(permission);
-            } else if ("create_image".equals(requestedScope)) {
-                OAuthPermission permission = new OAuthPermission();
-                permission.setHttpVerbs(Collections.singletonList("POST"));
-                List<String> uris = new ArrayList<>();
-                String partnerAddress = "/secured/bookstore/image/*";
-                uris.add(partnerAddress);
-                permission.setUris(uris);
-                
-                permissions.add(permission);
-            } else {
-                throw new OAuthServiceException("invalid_scope");
-            }
-        }
-        
-        return permissions;
-    }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cxf/blob/2e8219cf/systests/rs-security/src/test/java/org/apache/cxf/systest/jaxrs/security/oauth2/grants/AuthorizationGrantNegativeTest.java
----------------------------------------------------------------------
diff --git a/systests/rs-security/src/test/java/org/apache/cxf/systest/jaxrs/security/oauth2/grants/AuthorizationGrantNegativeTest.java b/systests/rs-security/src/test/java/org/apache/cxf/systest/jaxrs/security/oauth2/grants/AuthorizationGrantNegativeTest.java
index 008c473..59a66bd 100644
--- a/systests/rs-security/src/test/java/org/apache/cxf/systest/jaxrs/security/oauth2/grants/AuthorizationGrantNegativeTest.java
+++ b/systests/rs-security/src/test/java/org/apache/cxf/systest/jaxrs/security/oauth2/grants/AuthorizationGrantNegativeTest.java
@@ -20,11 +20,9 @@
 package org.apache.cxf.systest.jaxrs.security.oauth2.grants;
 
 import java.net.URL;
-import java.util.ArrayList;
 import java.util.Calendar;
 import java.util.Collections;
 import java.util.Date;
-import java.util.List;
 import java.util.Properties;
 
 import javax.ws.rs.client.ResponseProcessingException;
@@ -33,23 +31,18 @@ import javax.ws.rs.core.Response;
 
 import org.apache.cxf.common.util.Base64UrlUtility;
 import org.apache.cxf.jaxrs.client.WebClient;
-import org.apache.cxf.jaxrs.provider.json.JSONProvider;
-import org.apache.cxf.rs.security.jose.jwa.SignatureAlgorithm;
 import org.apache.cxf.rs.security.jose.jws.JwsHeaders;
 import org.apache.cxf.rs.security.jose.jws.JwsJwtCompactProducer;
 import org.apache.cxf.rs.security.jose.jws.JwsSignatureProvider;
 import org.apache.cxf.rs.security.jose.jws.JwsUtils;
 import org.apache.cxf.rs.security.jose.jwt.JwtClaims;
 import org.apache.cxf.rs.security.oauth2.common.ClientAccessToken;
-import org.apache.cxf.rs.security.oauth2.common.OAuthAuthorizationData;
-import org.apache.cxf.rs.security.oauth2.provider.OAuthJSONProvider;
-import org.apache.cxf.systest.jaxrs.security.oauth2.SamlCallbackHandler;
+import org.apache.cxf.systest.jaxrs.security.oauth2.common.OAuth2TestUtils;
+import org.apache.cxf.systest.jaxrs.security.oauth2.common.SamlCallbackHandler;
 import org.apache.cxf.testutil.common.AbstractBusClientServerTestBase;
-import org.apache.wss4j.common.ext.WSSecurityException;
 import org.apache.wss4j.common.saml.SAMLCallback;
 import org.apache.wss4j.common.saml.SAMLUtil;
 import org.apache.wss4j.common.saml.SamlAssertionWrapper;
-import org.apache.wss4j.common.saml.builder.SAML1Constants;
 import org.apache.wss4j.common.saml.builder.SAML2Constants;
 import org.junit.BeforeClass;
 
@@ -74,7 +67,8 @@ public class AuthorizationGrantNegativeTest extends AbstractBusClientServerTestB
         URL busFile = AuthorizationGrantTest.class.getResource("client.xml");
 
         String address = "https://localhost:" + PORT + "/services/";
-        WebClient client = WebClient.create(address, setupProviders(), "alice", "security", busFile.toString());
+        WebClient client = WebClient.create(address, OAuth2TestUtils.setupProviders(), 
+                                            "alice", "security", busFile.toString());
         // Save the Cookie for the second request...
         WebClient.getConfig(client).getRequestContext().put(
             org.apache.cxf.message.Message.MAINTAIN_SESSION, Boolean.TRUE);
@@ -101,7 +95,8 @@ public class AuthorizationGrantNegativeTest extends AbstractBusClientServerTestB
         URL busFile = AuthorizationGrantTest.class.getResource("client.xml");
 
         String address = "https://localhost:" + PORT + "/services/";
-        WebClient client = WebClient.create(address, setupProviders(), "alice", "security", busFile.toString());
+        WebClient client = WebClient.create(address, OAuth2TestUtils.setupProviders(), 
+                                            "alice", "security", busFile.toString());
         // Save the Cookie for the second request...
         WebClient.getConfig(client).getRequestContext().put(
             org.apache.cxf.message.Message.MAINTAIN_SESSION, Boolean.TRUE);
@@ -124,7 +119,8 @@ public class AuthorizationGrantNegativeTest extends AbstractBusClientServerTestB
         URL busFile = AuthorizationGrantTest.class.getResource("client.xml");
 
         String address = "https://localhost:" + PORT + "/services/";
-        WebClient client = WebClient.create(address, setupProviders(), "alice", "security", busFile.toString());
+        WebClient client = WebClient.create(address, OAuth2TestUtils.setupProviders(), 
+                                            "alice", "security", busFile.toString());
         // Save the Cookie for the second request...
         WebClient.getConfig(client).getRequestContext().put(
             org.apache.cxf.message.Message.MAINTAIN_SESSION, Boolean.TRUE);
@@ -151,7 +147,8 @@ public class AuthorizationGrantNegativeTest extends AbstractBusClientServerTestB
         URL busFile = AuthorizationGrantTest.class.getResource("client.xml");
 
         String address = "https://localhost:" + PORT + "/services/";
-        WebClient client = WebClient.create(address, setupProviders(), "alice", "security", busFile.toString());
+        WebClient client = WebClient.create(address, OAuth2TestUtils.setupProviders(), 
+                                            "alice", "security", busFile.toString());
         // Save the Cookie for the second request...
         WebClient.getConfig(client).getRequestContext().put(
             org.apache.cxf.message.Message.MAINTAIN_SESSION, Boolean.TRUE);
@@ -176,17 +173,19 @@ public class AuthorizationGrantNegativeTest extends AbstractBusClientServerTestB
         URL busFile = AuthorizationGrantTest.class.getResource("client.xml");
 
         String address = "https://localhost:" + PORT + "/services/";
-        WebClient client = WebClient.create(address, setupProviders(), "alice", "security", busFile.toString());
+        WebClient client = WebClient.create(address, OAuth2TestUtils.setupProviders(), 
+                                            "alice", "security", busFile.toString());
         // Save the Cookie for the second request...
         WebClient.getConfig(client).getRequestContext().put(
             org.apache.cxf.message.Message.MAINTAIN_SESSION, Boolean.TRUE);
 
         // Get Authorization Code
-        String code = getAuthorizationCode(client);
+        String code = OAuth2TestUtils.getAuthorizationCode(client);
         assertNotNull(code);
 
         // Now get the access token
-        client = WebClient.create(address, setupProviders(), "consumer-id", "this-is-a-secret", busFile.toString());
+        client = WebClient.create(address, OAuth2TestUtils.setupProviders(), 
+                                  "consumer-id", "this-is-a-secret", busFile.toString());
         // Save the Cookie for the second request...
         WebClient.getConfig(client).getRequestContext().put(
             org.apache.cxf.message.Message.MAINTAIN_SESSION, Boolean.TRUE);
@@ -219,22 +218,25 @@ public class AuthorizationGrantNegativeTest extends AbstractBusClientServerTestB
         URL busFile = AuthorizationGrantTest.class.getResource("client.xml");
 
         String address = "https://localhost:" + PORT + "/services/";
-        WebClient client = WebClient.create(address, setupProviders(), "alice", "security", busFile.toString());
+        WebClient client = WebClient.create(address, OAuth2TestUtils.setupProviders(), 
+                                            "alice", "security", busFile.toString());
         // Save the Cookie for the second request...
         WebClient.getConfig(client).getRequestContext().put(
             org.apache.cxf.message.Message.MAINTAIN_SESSION, Boolean.TRUE);
 
         // Get Authorization Code
-        String code = getAuthorizationCode(client, "read_balance");
+        String code = OAuth2TestUtils.getAuthorizationCode(client, "read_balance");
         assertNotNull(code);
 
         // Now get the access token
-        client = WebClient.create(address, setupProviders(), "consumer-id", "this-is-a-secret", busFile.toString());
+        client = WebClient.create(address, OAuth2TestUtils.setupProviders(), 
+                                  "consumer-id", "this-is-a-secret", busFile.toString());
         // Save the Cookie for the second request...
         WebClient.getConfig(client).getRequestContext().put(
             org.apache.cxf.message.Message.MAINTAIN_SESSION, Boolean.TRUE);
 
-        ClientAccessToken accessToken = getAccessTokenWithAuthorizationCode(client, code);
+        ClientAccessToken accessToken = 
+            OAuth2TestUtils.getAccessTokenWithAuthorizationCode(client, code);
         assertNotNull(accessToken.getTokenKey());
         assertNotNull(accessToken.getRefreshToken());
 
@@ -267,22 +269,25 @@ public class AuthorizationGrantNegativeTest extends AbstractBusClientServerTestB
         URL busFile = AuthorizationGrantTest.class.getResource("client.xml");
 
         String address = "https://localhost:" + PORT + "/services/";
-        WebClient client = WebClient.create(address, setupProviders(), "alice", "security", busFile.toString());
+        WebClient client = WebClient.create(address, OAuth2TestUtils.setupProviders(), 
+                                            "alice", "security", busFile.toString());
         // Save the Cookie for the second request...
         WebClient.getConfig(client).getRequestContext().put(
             org.apache.cxf.message.Message.MAINTAIN_SESSION, Boolean.TRUE);
 
         // Get Authorization Code
-        String code = getAuthorizationCode(client, "read_balance");
+        String code = OAuth2TestUtils.getAuthorizationCode(client, "read_balance");
         assertNotNull(code);
 
         // Now get the access token
-        client = WebClient.create(address, setupProviders(), "consumer-id", "this-is-a-secret", busFile.toString());
+        client = WebClient.create(address, OAuth2TestUtils.setupProviders(), 
+                                  "consumer-id", "this-is-a-secret", busFile.toString());
         // Save the Cookie for the second request...
         WebClient.getConfig(client).getRequestContext().put(
             org.apache.cxf.message.Message.MAINTAIN_SESSION, Boolean.TRUE);
 
-        ClientAccessToken accessToken = getAccessTokenWithAuthorizationCode(client, code);
+        ClientAccessToken accessToken = 
+            OAuth2TestUtils.getAccessTokenWithAuthorizationCode(client, code);
         assertNotNull(accessToken.getTokenKey());
         assertNotNull(accessToken.getRefreshToken());
 
@@ -320,17 +325,19 @@ public class AuthorizationGrantNegativeTest extends AbstractBusClientServerTestB
         URL busFile = AuthorizationGrantTest.class.getResource("client.xml");
 
         String address = "https://localhost:" + PORT + "/services/";
-        WebClient client = WebClient.create(address, setupProviders(), "alice", "security", busFile.toString());
+        WebClient client = WebClient.create(address, OAuth2TestUtils.setupProviders(), 
+                                            "alice", "security", busFile.toString());
         // Save the Cookie for the second request...
         WebClient.getConfig(client).getRequestContext().put(
             org.apache.cxf.message.Message.MAINTAIN_SESSION, Boolean.TRUE);
 
         // Get Authorization Code
-        String code = getAuthorizationCode(client);
+        String code = OAuth2TestUtils.getAuthorizationCode(client);
         assertNotNull(code);
 
         // Now get the access token
-        client = WebClient.create(address, setupProviders(), "consumer-id", "this-is-a-secret", busFile.toString());
+        client = WebClient.create(address, OAuth2TestUtils.setupProviders(), 
+                                  "consumer-id", "this-is-a-secret", busFile.toString());
         // Save the Cookie for the second request...
         WebClient.getConfig(client).getRequestContext().put(
             org.apache.cxf.message.Message.MAINTAIN_SESSION, Boolean.TRUE);
@@ -368,8 +375,9 @@ public class AuthorizationGrantNegativeTest extends AbstractBusClientServerTestB
         URL busFile = AuthorizationGrantTest.class.getResource("client.xml");
 
         String address = "https://localhost:" + PORT + "/services/";
-        WebClient client = WebClient.create(address, setupProviders(), "consumer-id", 
-                                            "this-is-a-secret", busFile.toString());
+        WebClient client = WebClient.create(address, OAuth2TestUtils.setupProviders(), 
+                                            "consumer-id", "this-is-a-secret", 
+                                            busFile.toString());
 
         // Get Access Token
         client.type("application/x-www-form-urlencoded").accept("application/json");
@@ -405,8 +413,9 @@ public class AuthorizationGrantNegativeTest extends AbstractBusClientServerTestB
         URL busFile = AuthorizationGrantTest.class.getResource("client.xml");
 
         String address = "https://localhost:" + PORT + "/services/";
-        WebClient client = WebClient.create(address, setupProviders(), "consumer-id", 
-                                            "this-is-a-secret", busFile.toString());
+        WebClient client = WebClient.create(address, OAuth2TestUtils.setupProviders(), 
+                                            "consumer-id", "this-is-a-secret", 
+                                            busFile.toString());
 
         // Get Access Token
         client.type("application/x-www-form-urlencoded").accept("application/json");
@@ -463,10 +472,11 @@ public class AuthorizationGrantNegativeTest extends AbstractBusClientServerTestB
         URL busFile = AuthorizationGrantNegativeTest.class.getResource("client.xml");
         
         String address = "https://localhost:" + PORT + "/services/";
-        WebClient client = WebClient.create(address, setupProviders(), "alice", "security", busFile.toString());
+        WebClient client = WebClient.create(address, OAuth2TestUtils.setupProviders(), 
+                                            "alice", "security", busFile.toString());
         
         // Create the SAML Assertion
-        String assertion = createToken(address + "token", false, true);
+        String assertion = OAuth2TestUtils.createToken(address + "token", false, true);
 
         // Get Access Token
         client.type("application/x-www-form-urlencoded").accept("application/json");
@@ -491,10 +501,11 @@ public class AuthorizationGrantNegativeTest extends AbstractBusClientServerTestB
         URL busFile = AuthorizationGrantNegativeTest.class.getResource("client.xml");
         
         String address = "https://localhost:" + PORT + "/services/";
-        WebClient client = WebClient.create(address, setupProviders(), "alice", "security", busFile.toString());
+        WebClient client = WebClient.create(address, OAuth2TestUtils.setupProviders(), 
+                                            "alice", "security", busFile.toString());
         
         // Create the SAML Assertion
-        String assertion = createToken(address + "token2", true, true);
+        String assertion = OAuth2TestUtils.createToken(address + "token2", true, true);
 
         // Get Access Token
         client.type("application/x-www-form-urlencoded").accept("application/json");
@@ -519,10 +530,11 @@ public class AuthorizationGrantNegativeTest extends AbstractBusClientServerTestB
         URL busFile = AuthorizationGrantNegativeTest.class.getResource("client.xml");
         
         String address = "https://localhost:" + PORT + "/services/";
-        WebClient client = WebClient.create(address, setupProviders(), "alice", "security", busFile.toString());
+        WebClient client = WebClient.create(address, OAuth2TestUtils.setupProviders(), 
+                                            "alice", "security", busFile.toString());
         
         // Create the SAML Assertion
-        String assertion = createToken(address + "token", true, false);
+        String assertion = OAuth2TestUtils.createToken(address + "token", true, false);
 
         // Get Access Token
         client.type("application/x-www-form-urlencoded").accept("application/json");
@@ -547,7 +559,8 @@ public class AuthorizationGrantNegativeTest extends AbstractBusClientServerTestB
         URL busFile = AuthorizationGrantNegativeTest.class.getResource("client.xml");
         
         String address = "https://localhost:" + PORT + "/services/";
-        WebClient client = WebClient.create(address, setupProviders(), "alice", "security", busFile.toString());
+        WebClient client = WebClient.create(address, OAuth2TestUtils.setupProviders(), 
+                                            "alice", "security", busFile.toString());
         
         // Create the SAML Assertion
         SamlCallbackHandler samlCallbackHandler = new SamlCallbackHandler(true);
@@ -591,7 +604,8 @@ public class AuthorizationGrantNegativeTest extends AbstractBusClientServerTestB
         URL busFile = AuthorizationGrantNegativeTest.class.getResource("client.xml");
         
         String address = "https://localhost:" + PORT + "/services/";
-        WebClient client = WebClient.create(address, setupProviders(), "alice", "security", busFile.toString());
+        WebClient client = WebClient.create(address, OAuth2TestUtils.setupProviders(), 
+                                            "alice", "security", busFile.toString());
         
         // Create the SAML Assertion
         SamlCallbackHandler samlCallbackHandler = new SamlCallbackHandler(true);
@@ -641,10 +655,11 @@ public class AuthorizationGrantNegativeTest extends AbstractBusClientServerTestB
         URL busFile = AuthorizationGrantNegativeTest.class.getResource("client.xml");
         
         String address = "https://localhost:" + PORT + "/services/";
-        WebClient client = WebClient.create(address, setupProviders(), "alice", "security", busFile.toString());
+        WebClient client = WebClient.create(address, OAuth2TestUtils.setupProviders(), 
+                                            "alice", "security", busFile.toString());
         
         // Create the JWT Token
-        String token = createToken("DoubleItSTSIssuer", "consumer-id", 
+        String token = OAuth2TestUtils.createToken("DoubleItSTSIssuer", "consumer-id", 
                                    "https://localhost:" + PORT + "/services/token", true, false);
         
         // Get Access Token
@@ -670,10 +685,11 @@ public class AuthorizationGrantNegativeTest extends AbstractBusClientServerTestB
         URL busFile = AuthorizationGrantNegativeTest.class.getResource("client.xml");
         
         String address = "https://localhost:" + PORT + "/services/";
-        WebClient client = WebClient.create(address, setupProviders(), "alice", "security", busFile.toString());
+        WebClient client = WebClient.create(address, OAuth2TestUtils.setupProviders(), 
+                                            "alice", "security", busFile.toString());
         
         // Create the JWT Token
-        String token = createToken(null, "consumer-id", 
+        String token = OAuth2TestUtils.createToken(null, "consumer-id", 
                                    "https://localhost:" + PORT + "/services/token", true, true);
 
         // Get Access Token
@@ -699,10 +715,11 @@ public class AuthorizationGrantNegativeTest extends AbstractBusClientServerTestB
         URL busFile = AuthorizationGrantNegativeTest.class.getResource("client.xml");
         
         String address = "https://localhost:" + PORT + "/services/";
-        WebClient client = WebClient.create(address, setupProviders(), "alice", "security", busFile.toString());
+        WebClient client = WebClient.create(address, OAuth2TestUtils.setupProviders(), 
+                                            "alice", "security", busFile.toString());
         
         // Create the JWT Token
-        String token = createToken("DoubleItSTSIssuer", "consumer-id", 
+        String token = OAuth2TestUtils.createToken("DoubleItSTSIssuer", "consumer-id", 
                                    "https://localhost:" + PORT + "/services/token", false, true);
 
         // Get Access Token
@@ -728,10 +745,11 @@ public class AuthorizationGrantNegativeTest extends AbstractBusClientServerTestB
         URL busFile = AuthorizationGrantNegativeTest.class.getResource("client.xml");
         
         String address = "https://localhost:" + PORT + "/services/";
-        WebClient client = WebClient.create(address, setupProviders(), "alice", "security", busFile.toString());
+        WebClient client = WebClient.create(address, OAuth2TestUtils.setupProviders(), 
+                                            "alice", "security", busFile.toString());
         
         // Create the JWT Token
-        String token = createToken("DoubleItSTSIssuer", "consumer-id", 
+        String token = OAuth2TestUtils.createToken("DoubleItSTSIssuer", "consumer-id", 
                                    "https://localhost:" + PORT + "/services/badtoken", true, true);
 
         // Get Access Token
@@ -757,7 +775,8 @@ public class AuthorizationGrantNegativeTest extends AbstractBusClientServerTestB
         URL busFile = AuthorizationGrantNegativeTest.class.getResource("client.xml");
         
         String address = "https://localhost:" + PORT + "/services/";
-        WebClient client = WebClient.create(address, setupProviders(), "alice", "security", busFile.toString());
+        WebClient client = WebClient.create(address, OAuth2TestUtils.setupProviders(), 
+                                            "alice", "security", busFile.toString());
         
         // Create the JWT Token
         // Create the JWT Token
@@ -807,143 +826,4 @@ public class AuthorizationGrantNegativeTest extends AbstractBusClientServerTestB
         }
     }
     
-    private List<Object> setupProviders() {
-        List<Object> providers = new ArrayList<Object>();
-        JSONProvider<OAuthAuthorizationData> jsonP = new JSONProvider<OAuthAuthorizationData>();
-        jsonP.setNamespaceMap(Collections.singletonMap("http://org.apache.cxf.rs.security.oauth",
-                                                       "ns2"));
-        providers.add(jsonP);
-        OAuthJSONProvider oauthProvider = new OAuthJSONProvider();
-        providers.add(oauthProvider);
-        
-        return providers;
-    }
-
-    private String createToken(String audRestr, boolean saml2, boolean sign) throws WSSecurityException {
-        SamlCallbackHandler samlCallbackHandler = new SamlCallbackHandler(sign);
-        samlCallbackHandler.setAudience(audRestr);
-        if (!saml2) {
-            samlCallbackHandler.setSaml2(false);
-            samlCallbackHandler.setConfirmationMethod(SAML1Constants.CONF_BEARER);
-        }
-        
-        SAMLCallback samlCallback = new SAMLCallback();
-        SAMLUtil.doSAMLCallback(samlCallbackHandler, samlCallback);
-
-        SamlAssertionWrapper samlAssertion = new SamlAssertionWrapper(samlCallback);
-        if (samlCallback.isSignAssertion()) {
-            samlAssertion.signAssertion(
-                samlCallback.getIssuerKeyName(),
-                samlCallback.getIssuerKeyPassword(),
-                samlCallback.getIssuerCrypto(),
-                samlCallback.isSendKeyValue(),
-                samlCallback.getCanonicalizationAlgorithm(),
-                samlCallback.getSignatureAlgorithm()
-            );
-        }
-        
-        return samlAssertion.assertionToString();
-    }
-    
-    private String createToken(String issuer, String subject, String audience, 
-                               boolean expiry, boolean sign) {
-        // Create the JWT Token
-        JwtClaims claims = new JwtClaims();
-        claims.setSubject(subject);
-        if (issuer != null) {
-            claims.setIssuer(issuer);
-        }
-        claims.setIssuedAt(new Date().getTime() / 1000L);
-        if (expiry) {
-            Calendar cal = Calendar.getInstance();
-            cal.add(Calendar.SECOND, 60);
-            claims.setExpiryTime(cal.getTimeInMillis() / 1000L);
-        }
-        if (audience != null) {
-            claims.setAudiences(Collections.singletonList(audience));
-        }
-        
-        if (sign) {
-            // Sign the JWT Token
-            Properties signingProperties = new Properties();
-            signingProperties.put("rs.security.keystore.type", "jks");
-            signingProperties.put("rs.security.keystore.password", "password");
-            signingProperties.put("rs.security.keystore.alias", "alice");
-            signingProperties.put("rs.security.keystore.file", 
-                                  "org/apache/cxf/systest/jaxrs/security/certs/alice.jks");
-            signingProperties.put("rs.security.key.password", "password");
-            signingProperties.put("rs.security.signature.algorithm", "RS256");
-            
-            JwsHeaders jwsHeaders = new JwsHeaders(signingProperties);
-            JwsJwtCompactProducer jws = new JwsJwtCompactProducer(jwsHeaders, claims);
-            
-            JwsSignatureProvider sigProvider = 
-                JwsUtils.loadSignatureProvider(signingProperties, jwsHeaders);
-            
-            return jws.signWith(sigProvider);
-        }
-        
-        JwsHeaders jwsHeaders = new JwsHeaders(SignatureAlgorithm.NONE);
-        JwsJwtCompactProducer jws = new JwsJwtCompactProducer(jwsHeaders, claims);
-        return jws.getSignedEncodedJws();
-    }
-    
-    private String getAuthorizationCode(WebClient client) {
-        return getAuthorizationCode(client, null);
-    }
-
-    private String getAuthorizationCode(WebClient client, String scope) {
-        // Make initial authorization request
-        client.type("application/json").accept("application/json");
-        client.query("client_id", "consumer-id");
-        client.query("redirect_uri", "http://www.blah.apache.org");
-        client.query("response_type", "code");
-        if (scope != null) {
-            client.query("scope", scope);
-        }
-        client.path("authorize/");
-        Response response = client.get();
-
-        OAuthAuthorizationData authzData = response.readEntity(OAuthAuthorizationData.class);
-
-        // Now call "decision" to get the authorization code grant
-        client.path("decision");
-        client.type("application/x-www-form-urlencoded");
-
-        Form form = new Form();
-        form.param("session_authenticity_token", authzData.getAuthenticityToken());
-        form.param("client_id", authzData.getClientId());
-        form.param("redirect_uri", authzData.getRedirectUri());
-        if (authzData.getProposedScope() != null) {
-            form.param("scope", authzData.getProposedScope());
-        }
-        form.param("oauthDecision", "allow");
-
-        response = client.post(form);
-        String location = response.getHeaderString("Location"); 
-        return getSubstring(location, "code");
-    }
-
-    private ClientAccessToken getAccessTokenWithAuthorizationCode(WebClient client, String code) {
-        client.type("application/x-www-form-urlencoded").accept("application/json");
-        client.path("token");
-
-        Form form = new Form();
-        form.param("grant_type", "authorization_code");
-        form.param("code", code);
-        form.param("client_id", "consumer-id");
-        Response response = client.post(form);
-
-        return response.readEntity(ClientAccessToken.class);
-    }
-    
-    private String getSubstring(String parentString, String substringName) {
-        String foundString = 
-            parentString.substring(parentString.indexOf(substringName + "=") + (substringName + "=").length());
-        int ampersandIndex = foundString.indexOf('&');
-        if (ampersandIndex < 1) {
-            ampersandIndex = foundString.length();
-        }
-        return foundString.substring(0, ampersandIndex);
-    }
 }

http://git-wip-us.apache.org/repos/asf/cxf/blob/2e8219cf/systests/rs-security/src/test/java/org/apache/cxf/systest/jaxrs/security/oauth2/grants/AuthorizationGrantTest.java
----------------------------------------------------------------------
diff --git a/systests/rs-security/src/test/java/org/apache/cxf/systest/jaxrs/security/oauth2/grants/AuthorizationGrantTest.java b/systests/rs-security/src/test/java/org/apache/cxf/systest/jaxrs/security/oauth2/grants/AuthorizationGrantTest.java
index ecdb2d2..3fe9a76 100644
--- a/systests/rs-security/src/test/java/org/apache/cxf/systest/jaxrs/security/oauth2/grants/AuthorizationGrantTest.java
+++ b/systests/rs-security/src/test/java/org/apache/cxf/systest/jaxrs/security/oauth2/grants/AuthorizationGrantTest.java
@@ -20,34 +20,16 @@
 package org.apache.cxf.systest.jaxrs.security.oauth2.grants;
 
 import java.net.URL;
-import java.util.ArrayList;
-import java.util.Calendar;
-import java.util.Collections;
-import java.util.Date;
-import java.util.List;
-import java.util.Properties;
 
 import javax.ws.rs.core.Form;
 import javax.ws.rs.core.Response;
 
 import org.apache.cxf.common.util.Base64UrlUtility;
 import org.apache.cxf.jaxrs.client.WebClient;
-import org.apache.cxf.jaxrs.provider.json.JSONProvider;
-import org.apache.cxf.rs.security.jose.jwa.SignatureAlgorithm;
-import org.apache.cxf.rs.security.jose.jws.JwsHeaders;
-import org.apache.cxf.rs.security.jose.jws.JwsJwtCompactProducer;
-import org.apache.cxf.rs.security.jose.jws.JwsSignatureProvider;
-import org.apache.cxf.rs.security.jose.jws.JwsUtils;
-import org.apache.cxf.rs.security.jose.jwt.JwtClaims;
 import org.apache.cxf.rs.security.oauth2.common.ClientAccessToken;
 import org.apache.cxf.rs.security.oauth2.common.OAuthAuthorizationData;
-import org.apache.cxf.rs.security.oauth2.provider.OAuthJSONProvider;
-import org.apache.cxf.systest.jaxrs.security.oauth2.SamlCallbackHandler;
+import org.apache.cxf.systest.jaxrs.security.oauth2.common.OAuth2TestUtils;
 import org.apache.cxf.testutil.common.AbstractBusClientServerTestBase;
-import org.apache.wss4j.common.ext.WSSecurityException;
-import org.apache.wss4j.common.saml.SAMLCallback;
-import org.apache.wss4j.common.saml.SAMLUtil;
-import org.apache.wss4j.common.saml.SamlAssertionWrapper;
 import org.junit.BeforeClass;
 
 /**
@@ -67,22 +49,25 @@ public class AuthorizationGrantTest extends AbstractBusClientServerTestBase {
         URL busFile = AuthorizationGrantTest.class.getResource("client.xml");
 
         String address = "https://localhost:" + PORT + "/services/";
-        WebClient client = WebClient.create(address, setupProviders(), "alice", "security", busFile.toString());
+        WebClient client = WebClient.create(address, OAuth2TestUtils.setupProviders(), 
+                                            "alice", "security", busFile.toString());
         // Save the Cookie for the second request...
         WebClient.getConfig(client).getRequestContext().put(
             org.apache.cxf.message.Message.MAINTAIN_SESSION, Boolean.TRUE);
 
         // Get Authorization Code
-        String code = getAuthorizationCode(client);
+        String code = OAuth2TestUtils.getAuthorizationCode(client);
         assertNotNull(code);
 
         // Now get the access token
-        client = WebClient.create(address, setupProviders(), "consumer-id", "this-is-a-secret", busFile.toString());
+        client = WebClient.create(address, OAuth2TestUtils.setupProviders(), 
+                                  "consumer-id", "this-is-a-secret", busFile.toString());
         // Save the Cookie for the second request...
         WebClient.getConfig(client).getRequestContext().put(
             org.apache.cxf.message.Message.MAINTAIN_SESSION, Boolean.TRUE);
 
-        ClientAccessToken accessToken = getAccessTokenWithAuthorizationCode(client, code);
+        ClientAccessToken accessToken = 
+            OAuth2TestUtils.getAccessTokenWithAuthorizationCode(client, code);
         assertNotNull(accessToken.getTokenKey());
     }
 
@@ -91,22 +76,25 @@ public class AuthorizationGrantTest extends AbstractBusClientServerTestBase {
         URL busFile = AuthorizationGrantTest.class.getResource("client.xml");
 
         String address = "https://localhost:" + PORT + "/services/";
-        WebClient client = WebClient.create(address, setupProviders(), "alice", "security", busFile.toString());
+        WebClient client = WebClient.create(address, OAuth2TestUtils.setupProviders(), 
+                                            "alice", "security", busFile.toString());
         // Save the Cookie for the second request...
         WebClient.getConfig(client).getRequestContext().put(
             org.apache.cxf.message.Message.MAINTAIN_SESSION, Boolean.TRUE);
 
         // Get Authorization Code
-        String code = getAuthorizationCode(client);
+        String code = OAuth2TestUtils.getAuthorizationCode(client);
         assertNotNull(code);
 
         // Now get the access token
-        client = WebClient.create(address, setupProviders(), "consumer-id", "this-is-a-secret", busFile.toString());
+        client = WebClient.create(address, OAuth2TestUtils.setupProviders(), 
+                                  "consumer-id", "this-is-a-secret", busFile.toString());
         // Save the Cookie for the second request...
         WebClient.getConfig(client).getRequestContext().put(
             org.apache.cxf.message.Message.MAINTAIN_SESSION, Boolean.TRUE);
 
-        ClientAccessToken accessToken = getAccessTokenWithAuthorizationCode(client, code);
+        ClientAccessToken accessToken = 
+            OAuth2TestUtils.getAccessTokenWithAuthorizationCode(client, code);
         assertNotNull(accessToken.getTokenKey());
         assertNotNull(accessToken.getRefreshToken());
 
@@ -129,22 +117,25 @@ public class AuthorizationGrantTest extends AbstractBusClientServerTestBase {
         URL busFile = AuthorizationGrantTest.class.getResource("client.xml");
 
         String address = "https://localhost:" + PORT + "/services/";
-        WebClient client = WebClient.create(address, setupProviders(), "alice", "security", busFile.toString());
+        WebClient client = WebClient.create(address, OAuth2TestUtils.setupProviders(), 
+                                            "alice", "security", busFile.toString());
         // Save the Cookie for the second request...
         WebClient.getConfig(client).getRequestContext().put(
             org.apache.cxf.message.Message.MAINTAIN_SESSION, Boolean.TRUE);
 
         // Get Authorization Code
-        String code = getAuthorizationCode(client, "read_balance");
+        String code = OAuth2TestUtils.getAuthorizationCode(client, "read_balance");
         assertNotNull(code);
 
         // Now get the access token
-        client = WebClient.create(address, setupProviders(), "consumer-id", "this-is-a-secret", busFile.toString());
+        client = WebClient.create(address, OAuth2TestUtils.setupProviders(), 
+                                  "consumer-id", "this-is-a-secret", busFile.toString());
         // Save the Cookie for the second request...
         WebClient.getConfig(client).getRequestContext().put(
             org.apache.cxf.message.Message.MAINTAIN_SESSION, Boolean.TRUE);
 
-        ClientAccessToken accessToken = getAccessTokenWithAuthorizationCode(client, code);
+        ClientAccessToken accessToken = 
+            OAuth2TestUtils.getAccessTokenWithAuthorizationCode(client, code);
         assertNotNull(accessToken.getTokenKey());
         assertNotNull(accessToken.getRefreshToken());
 
@@ -168,22 +159,25 @@ public class AuthorizationGrantTest extends AbstractBusClientServerTestBase {
         URL busFile = AuthorizationGrantTest.class.getResource("client.xml");
 
         String address = "https://localhost:" + PORT + "/services/";
-        WebClient client = WebClient.create(address, setupProviders(), "alice", "security", busFile.toString());
+        WebClient client = WebClient.create(address, OAuth2TestUtils.setupProviders(), 
+                                            "alice", "security", busFile.toString());
         // Save the Cookie for the second request...
         WebClient.getConfig(client).getRequestContext().put(
             org.apache.cxf.message.Message.MAINTAIN_SESSION, Boolean.TRUE);
 
         // Get Authorization Code
-        String code = getAuthorizationCode(client, "read_balance");
+        String code = OAuth2TestUtils.getAuthorizationCode(client, "read_balance");
         assertNotNull(code);
 
         // Now get the access token
-        client = WebClient.create(address, setupProviders(), "consumer-id", "this-is-a-secret", busFile.toString());
+        client = WebClient.create(address, OAuth2TestUtils.setupProviders(), 
+                                  "consumer-id", "this-is-a-secret", busFile.toString());
         // Save the Cookie for the second request...
         WebClient.getConfig(client).getRequestContext().put(
             org.apache.cxf.message.Message.MAINTAIN_SESSION, Boolean.TRUE);
 
-        ClientAccessToken accessToken = getAccessTokenWithAuthorizationCode(client, code);
+        ClientAccessToken accessToken = 
+            OAuth2TestUtils.getAccessTokenWithAuthorizationCode(client, code);
         assertNotNull(accessToken.getTokenKey());
     }
 
@@ -192,7 +186,8 @@ public class AuthorizationGrantTest extends AbstractBusClientServerTestBase {
         URL busFile = AuthorizationGrantTest.class.getResource("client.xml");
 
         String address = "https://localhost:" + PORT + "/services/";
-        WebClient client = WebClient.create(address, setupProviders(), "alice", "security", busFile.toString());
+        WebClient client = WebClient.create(address, OAuth2TestUtils.setupProviders(), 
+                                            "alice", "security", busFile.toString());
         // Save the Cookie for the second request...
         WebClient.getConfig(client).getRequestContext().put(
             org.apache.cxf.message.Message.MAINTAIN_SESSION, Boolean.TRUE);
@@ -220,7 +215,7 @@ public class AuthorizationGrantTest extends AbstractBusClientServerTestBase {
         response = client.post(form);
 
         String location = response.getHeaderString("Location"); 
-        String accessToken = getSubstring(location, "access_token");
+        String accessToken = OAuth2TestUtils.getSubstring(location, "access_token");
         assertNotNull(accessToken);
     }
 
@@ -229,8 +224,9 @@ public class AuthorizationGrantTest extends AbstractBusClientServerTestBase {
         URL busFile = AuthorizationGrantTest.class.getResource("client.xml");
 
         String address = "https://localhost:" + PORT + "/services/";
-        WebClient client = WebClient.create(address, setupProviders(), "consumer-id", 
-                                            "this-is-a-secret", busFile.toString());
+        WebClient client = WebClient.create(address, OAuth2TestUtils.setupProviders(), 
+                                            "consumer-id", "this-is-a-secret",
+                                            busFile.toString());
 
         // Get Access Token
         client.type("application/x-www-form-urlencoded").accept("application/json");
@@ -252,8 +248,9 @@ public class AuthorizationGrantTest extends AbstractBusClientServerTestBase {
         URL busFile = AuthorizationGrantTest.class.getResource("client.xml");
 
         String address = "https://localhost:" + PORT + "/services/";
-        WebClient client = WebClient.create(address, setupProviders(), "consumer-id", 
-                                            "this-is-a-secret", busFile.toString());
+        WebClient client = WebClient.create(address, OAuth2TestUtils.setupProviders(), 
+                                            "consumer-id", "this-is-a-secret", 
+                                            busFile.toString());
 
         // Get Access Token
         client.type("application/x-www-form-urlencoded").accept("application/json");
@@ -273,10 +270,11 @@ public class AuthorizationGrantTest extends AbstractBusClientServerTestBase {
         URL busFile = AuthorizationGrantTest.class.getResource("client.xml");
         
         String address = "https://localhost:" + PORT + "/services/";
-        WebClient client = WebClient.create(address, setupProviders(), "alice", "security", busFile.toString());
+        WebClient client = WebClient.create(address, OAuth2TestUtils.setupProviders(), 
+                                            "alice", "security", busFile.toString());
         
         // Create the SAML Assertion
-        String assertion = createToken(address + "token");
+        String assertion = OAuth2TestUtils.createToken(address + "token");
 
         // Get Access Token
         client.type("application/x-www-form-urlencoded").accept("application/json");
@@ -298,10 +296,11 @@ public class AuthorizationGrantTest extends AbstractBusClientServerTestBase {
         URL busFile = AuthorizationGrantTest.class.getResource("client.xml");
         
         String address = "https://localhost:" + PORT + "/services/";
-        WebClient client = WebClient.create(address, setupProviders(), "alice", "security", busFile.toString());
+        WebClient client = WebClient.create(address, OAuth2TestUtils.setupProviders(), 
+                                            "alice", "security", busFile.toString());
         
         // Create the JWT Token
-        String token = createToken("DoubleItSTSIssuer", "consumer-id", 
+        String token = OAuth2TestUtils.createToken("DoubleItSTSIssuer", "consumer-id", 
                                    "https://localhost:" + PORT + "/services/token", true, true);
 
         // Get Access Token
@@ -319,139 +318,4 @@ public class AuthorizationGrantTest extends AbstractBusClientServerTestBase {
         assertNotNull(accessToken.getRefreshToken());
     }
     
-    private String getAuthorizationCode(WebClient client) {
-        return getAuthorizationCode(client, null);
-    }
-
-    private String getAuthorizationCode(WebClient client, String scope) {
-        // Make initial authorization request
-        client.type("application/json").accept("application/json");
-        client.query("client_id", "consumer-id");
-        client.query("redirect_uri", "http://www.blah.apache.org");
-        client.query("response_type", "code");
-        if (scope != null) {
-            client.query("scope", scope);
-        }
-        client.path("authorize/");
-        Response response = client.get();
-
-        OAuthAuthorizationData authzData = response.readEntity(OAuthAuthorizationData.class);
-
-        // Now call "decision" to get the authorization code grant
-        client.path("decision");
-        client.type("application/x-www-form-urlencoded");
-
-        Form form = new Form();
-        form.param("session_authenticity_token", authzData.getAuthenticityToken());
-        form.param("client_id", authzData.getClientId());
-        form.param("redirect_uri", authzData.getRedirectUri());
-        if (authzData.getProposedScope() != null) {
-            form.param("scope", authzData.getProposedScope());
-        }
-        form.param("oauthDecision", "allow");
-
-        response = client.post(form);
-        String location = response.getHeaderString("Location"); 
-        return getSubstring(location, "code");
-    }
-
-    private ClientAccessToken getAccessTokenWithAuthorizationCode(WebClient client, String code) {
-        client.type("application/x-www-form-urlencoded").accept("application/json");
-        client.path("token");
-
-        Form form = new Form();
-        form.param("grant_type", "authorization_code");
-        form.param("code", code);
-        form.param("client_id", "consumer-id");
-        Response response = client.post(form);
-
-        return response.readEntity(ClientAccessToken.class);
-    }
-    
-    private List<Object> setupProviders() {
-        List<Object> providers = new ArrayList<Object>();
-        JSONProvider<OAuthAuthorizationData> jsonP = new JSONProvider<OAuthAuthorizationData>();
-        jsonP.setNamespaceMap(Collections.singletonMap("http://org.apache.cxf.rs.security.oauth",
-                                                       "ns2"));
-        providers.add(jsonP);
-        OAuthJSONProvider oauthProvider = new OAuthJSONProvider();
-        providers.add(oauthProvider);
-        
-        return providers;
-    }
-
-    private String createToken(String audRestr) throws WSSecurityException {
-        SamlCallbackHandler samlCallbackHandler = new SamlCallbackHandler(true);
-        samlCallbackHandler.setAudience(audRestr);
-        
-        SAMLCallback samlCallback = new SAMLCallback();
-        SAMLUtil.doSAMLCallback(samlCallbackHandler, samlCallback);
-
-        SamlAssertionWrapper samlAssertion = new SamlAssertionWrapper(samlCallback);
-        if (samlCallback.isSignAssertion()) {
-            samlAssertion.signAssertion(
-                samlCallback.getIssuerKeyName(),
-                samlCallback.getIssuerKeyPassword(),
-                samlCallback.getIssuerCrypto(),
-                samlCallback.isSendKeyValue(),
-                samlCallback.getCanonicalizationAlgorithm(),
-                samlCallback.getSignatureAlgorithm()
-            );
-        }
-        
-        return samlAssertion.assertionToString();
-    }
-    
-    private String createToken(String issuer, String subject, String audience, 
-                               boolean expiry, boolean sign) {
-        // Create the JWT Token
-        JwtClaims claims = new JwtClaims();
-        claims.setSubject(subject);
-        if (issuer != null) {
-            claims.setIssuer(issuer);
-        }
-        claims.setIssuedAt(new Date().getTime() / 1000L);
-        if (expiry) {
-            Calendar cal = Calendar.getInstance();
-            cal.add(Calendar.SECOND, 60);
-            claims.setExpiryTime(cal.getTimeInMillis() / 1000L);
-        }
-        if (audience != null) {
-            claims.setAudiences(Collections.singletonList(audience));
-        }
-        
-        if (sign) {
-            // Sign the JWT Token
-            Properties signingProperties = new Properties();
-            signingProperties.put("rs.security.keystore.type", "jks");
-            signingProperties.put("rs.security.keystore.password", "password");
-            signingProperties.put("rs.security.keystore.alias", "alice");
-            signingProperties.put("rs.security.keystore.file", 
-                                  "org/apache/cxf/systest/jaxrs/security/certs/alice.jks");
-            signingProperties.put("rs.security.key.password", "password");
-            signingProperties.put("rs.security.signature.algorithm", "RS256");
-            
-            JwsHeaders jwsHeaders = new JwsHeaders(signingProperties);
-            JwsJwtCompactProducer jws = new JwsJwtCompactProducer(jwsHeaders, claims);
-            
-            JwsSignatureProvider sigProvider = 
-                JwsUtils.loadSignatureProvider(signingProperties, jwsHeaders);
-            
-            return jws.signWith(sigProvider);
-        }
-        
-        JwsHeaders jwsHeaders = new JwsHeaders(SignatureAlgorithm.NONE);
-        JwsJwtCompactProducer jws = new JwsJwtCompactProducer(jwsHeaders, claims);
-        return jws.getSignedEncodedJws();
-    }
-    
-    private String getSubstring(String parentString, String substringName) {
-        String foundString = 
-            parentString.substring(parentString.indexOf(substringName + "=") + (substringName + "=").length());
-        int ampersandIndex = foundString.indexOf('&');
-        if (ampersandIndex < 1) {
-            ampersandIndex = foundString.length();
-        }
-        return foundString.substring(0, ampersandIndex);
-    }
 }

http://git-wip-us.apache.org/repos/asf/cxf/blob/2e8219cf/systests/rs-security/src/test/java/org/apache/cxf/systest/jaxrs/security/oauth2/grants/BasicAuthFilter.java
----------------------------------------------------------------------
diff --git a/systests/rs-security/src/test/java/org/apache/cxf/systest/jaxrs/security/oauth2/grants/BasicAuthFilter.java b/systests/rs-security/src/test/java/org/apache/cxf/systest/jaxrs/security/oauth2/grants/BasicAuthFilter.java
deleted file mode 100644
index db8fe4f..0000000
--- a/systests/rs-security/src/test/java/org/apache/cxf/systest/jaxrs/security/oauth2/grants/BasicAuthFilter.java
+++ /dev/null
@@ -1,117 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.cxf.systest.jaxrs.security.oauth2.grants;
-
-import java.io.IOException;
-import java.security.Principal;
-
-import javax.security.auth.callback.CallbackHandler;
-import javax.ws.rs.container.ContainerRequestContext;
-import javax.ws.rs.container.ContainerRequestFilter;
-import javax.ws.rs.core.Response;
-
-import org.w3c.dom.Document;
-
-import org.apache.cxf.configuration.security.AuthorizationPolicy;
-import org.apache.cxf.helpers.DOMUtils;
-import org.apache.cxf.jaxrs.utils.ExceptionUtils;
-import org.apache.cxf.jaxrs.utils.JAXRSUtils;
-import org.apache.cxf.message.Message;
-import org.apache.cxf.security.SecurityContext;
-import org.apache.wss4j.common.principal.WSUsernameTokenPrincipalImpl;
-import org.apache.wss4j.dom.WSConstants;
-import org.apache.wss4j.dom.handler.RequestData;
-import org.apache.wss4j.dom.message.token.UsernameToken;
-import org.apache.wss4j.dom.validate.Credential;
-import org.apache.wss4j.dom.validate.UsernameTokenValidator;
-
-/**
- * A simple filter to validate a Basic Auth username/password via a CallbackHandler
- */
-public class BasicAuthFilter implements ContainerRequestFilter {
-
-    private CallbackHandler callbackHandler;
-    
-    public void filter(ContainerRequestContext requestContext) throws IOException {
-        Message message = JAXRSUtils.getCurrentMessage();
-        AuthorizationPolicy policy = message.get(AuthorizationPolicy.class);
-        
-        if (policy == null || policy.getUserName() == null || policy.getPassword() == null) {
-            requestContext.abortWith(
-                Response.status(401).header("WWW-Authenticate", "Basic realm=\"IdP\"").build());
-        }
-
-        try {
-            UsernameToken token = convertPolicyToToken(policy);
-            Credential credential = new Credential();
-            credential.setUsernametoken(token);
-            
-            RequestData data = new RequestData();
-            data.setMsgContext(message);
-            data.setCallbackHandler(callbackHandler);
-            UsernameTokenValidator validator = new UsernameTokenValidator();
-            credential = validator.validate(credential, data);
-            
-            // Create a Principal/SecurityContext
-            Principal p = null;
-            if (credential != null && credential.getPrincipal() != null) {
-                p = credential.getPrincipal();
-            } else {
-                p = new WSUsernameTokenPrincipalImpl(policy.getUserName(), false);
-                ((WSUsernameTokenPrincipalImpl)p).setPassword(policy.getPassword());
-            }
-            message.put(SecurityContext.class, createSecurityContext(p));
-        } catch (Exception ex) {
-            throw ExceptionUtils.toInternalServerErrorException(ex, null);
-        }
-    }
-
-    protected UsernameToken convertPolicyToToken(AuthorizationPolicy policy) 
-        throws Exception {
-
-        Document doc = DOMUtils.createDocument();
-        UsernameToken token = new UsernameToken(false, doc, 
-                                                WSConstants.PASSWORD_TEXT);
-        token.setName(policy.getUserName());
-        token.setPassword(policy.getPassword());
-        return token;
-    }
-    
-    protected SecurityContext createSecurityContext(final Principal p) {
-        return new SecurityContext() {
-
-            public Principal getUserPrincipal() {
-                return p;
-            }
-
-            public boolean isUserInRole(String arg0) {
-                return false;
-            }
-        };
-    }
-
-    public CallbackHandler getCallbackHandler() {
-        return callbackHandler;
-    }
-
-    public void setCallbackHandler(CallbackHandler callbackHandler) {
-        this.callbackHandler = callbackHandler;
-    }
-
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cxf/blob/2e8219cf/systests/rs-security/src/test/java/org/apache/cxf/systest/jaxrs/security/oauth2/grants/BookServerOAuth2.java
----------------------------------------------------------------------
diff --git a/systests/rs-security/src/test/java/org/apache/cxf/systest/jaxrs/security/oauth2/grants/BookServerOAuth2.java b/systests/rs-security/src/test/java/org/apache/cxf/systest/jaxrs/security/oauth2/grants/BookServerOAuth2.java
new file mode 100644
index 0000000..88b7e33
--- /dev/null
+++ b/systests/rs-security/src/test/java/org/apache/cxf/systest/jaxrs/security/oauth2/grants/BookServerOAuth2.java
@@ -0,0 +1,59 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.cxf.systest.jaxrs.security.oauth2.grants;
+
+import java.net.URL;
+
+import org.apache.cxf.Bus;
+import org.apache.cxf.BusFactory;
+import org.apache.cxf.bus.spring.SpringBusFactory;
+import org.apache.cxf.testutil.common.AbstractBusTestServerBase;
+import org.apache.cxf.testutil.common.TestUtil;
+    
+public class BookServerOAuth2 extends AbstractBusTestServerBase {
+    public static final String PORT = TestUtil.getPortNumber("jaxrs-oauth2");
+    private static final URL SERVER_CONFIG_FILE =
+        BookServerOAuth2.class.getResource("server.xml");
+    
+    protected void run() {
+        SpringBusFactory bf = new SpringBusFactory();
+        Bus springBus = bf.createBus(SERVER_CONFIG_FILE);
+        BusFactory.setDefaultBus(springBus);
+        setBus(springBus);
+        
+        try {
+            new BookServerOAuth2();
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }        
+    }
+
+    public static void main(String[] args) {
+        try {
+            BookServerOAuth2 s = new BookServerOAuth2();
+            s.start();
+        } catch (Exception ex) {
+            ex.printStackTrace();
+            System.exit(-1);
+        } finally {
+            System.out.println("done!");
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/cxf/blob/2e8219cf/systests/rs-security/src/test/java/org/apache/cxf/systest/jaxrs/security/oauth2/grants/CallbackHandlerImpl.java
----------------------------------------------------------------------
diff --git a/systests/rs-security/src/test/java/org/apache/cxf/systest/jaxrs/security/oauth2/grants/CallbackHandlerImpl.java b/systests/rs-security/src/test/java/org/apache/cxf/systest/jaxrs/security/oauth2/grants/CallbackHandlerImpl.java
deleted file mode 100644
index 12c8658..0000000
--- a/systests/rs-security/src/test/java/org/apache/cxf/systest/jaxrs/security/oauth2/grants/CallbackHandlerImpl.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.cxf.systest.jaxrs.security.oauth2.grants;
-
-import java.io.IOException;
-
-import javax.security.auth.callback.Callback;
-import javax.security.auth.callback.CallbackHandler;
-import javax.security.auth.callback.UnsupportedCallbackException;
-
-import org.apache.wss4j.common.ext.WSPasswordCallback;
-
-public class CallbackHandlerImpl implements CallbackHandler {
-
-    public void handle(Callback[] callbacks) throws IOException,
-            UnsupportedCallbackException {
-        for (int i = 0; i < callbacks.length; i++) {
-            if (callbacks[i] instanceof WSPasswordCallback) { // CXF
-                WSPasswordCallback pc = (WSPasswordCallback) callbacks[i];
-                if ("alice".equals(pc.getIdentifier())) {
-                    pc.setPassword("security");
-                    break;
-                } else if ("bob".equals(pc.getIdentifier())) {
-                    pc.setPassword("security");
-                    break;
-                } else if ("consumer-id".equals(pc.getIdentifier())) {
-                    pc.setPassword("this-is-a-secret");
-                    break;
-                } else if ("service".equals(pc.getIdentifier())) {
-                    pc.setPassword("service-pass");
-                    break;
-                }
-            }
-        }
-    }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cxf/blob/2e8219cf/systests/rs-security/src/test/java/org/apache/cxf/systest/jaxrs/security/oauth2/grants/CustomGrantHandler.java
----------------------------------------------------------------------
diff --git a/systests/rs-security/src/test/java/org/apache/cxf/systest/jaxrs/security/oauth2/grants/CustomGrantHandler.java b/systests/rs-security/src/test/java/org/apache/cxf/systest/jaxrs/security/oauth2/grants/CustomGrantHandler.java
new file mode 100644
index 0000000..7941452
--- /dev/null
+++ b/systests/rs-security/src/test/java/org/apache/cxf/systest/jaxrs/security/oauth2/grants/CustomGrantHandler.java
@@ -0,0 +1,51 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.cxf.systest.jaxrs.security.oauth2.grants;
+
+import java.util.Collections;
+import java.util.List;
+
+import javax.ws.rs.core.MultivaluedMap;
+
+import org.apache.cxf.rs.security.oauth2.common.AccessTokenRegistration;
+import org.apache.cxf.rs.security.oauth2.common.Client;
+import org.apache.cxf.rs.security.oauth2.common.ServerAccessToken;
+import org.apache.cxf.rs.security.oauth2.provider.AccessTokenGrantHandler;
+import org.apache.cxf.rs.security.oauth2.provider.OAuthDataProvider;
+import org.apache.cxf.rs.security.oauth2.provider.OAuthServiceException;
+
+public class CustomGrantHandler implements AccessTokenGrantHandler {
+
+    private OAuthDataProvider dataProvider;
+    
+    public void setDataProvider(OAuthDataProvider dataProvider) {
+        this.dataProvider = dataProvider;
+    }
+    
+    public List<String> getSupportedGrantTypes() {
+        return Collections.singletonList("custom_grant");
+    }
+
+    public ServerAccessToken createAccessToken(Client client, MultivaluedMap<String, String> params)
+        throws OAuthServiceException {
+        AccessTokenRegistration atr = new AccessTokenRegistration();
+        atr.setClient(client);
+        return dataProvider.createAccessToken(atr);
+    }
+}