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);
+ }
+}