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 2015/12/10 18:27:39 UTC

cxf git commit: Adding JWT Authorization Grant tests

Repository: cxf
Updated Branches:
  refs/heads/master 00d4e973d -> f346c8054


Adding JWT Authorization Grant tests


Project: http://git-wip-us.apache.org/repos/asf/cxf/repo
Commit: http://git-wip-us.apache.org/repos/asf/cxf/commit/f346c805
Tree: http://git-wip-us.apache.org/repos/asf/cxf/tree/f346c805
Diff: http://git-wip-us.apache.org/repos/asf/cxf/diff/f346c805

Branch: refs/heads/master
Commit: f346c80548cb96ad9021b4e02a352c7f3f4258bc
Parents: 00d4e97
Author: Colm O hEigeartaigh <co...@apache.org>
Authored: Thu Dec 10 17:27:06 2015 +0000
Committer: Colm O hEigeartaigh <co...@apache.org>
Committed: Thu Dec 10 17:27:06 2015 +0000

----------------------------------------------------------------------
 .../grants/AuthorizationGrantNegativeTest.java  | 171 ++++++++++++++++++-
 .../oauth2/grants/AuthorizationGrantTest.java   |   1 +
 2 files changed, 164 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cxf/blob/f346c805/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 09c0cb1..3da9604 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
@@ -21,8 +21,11 @@ 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;
@@ -30,6 +33,12 @@ 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;
@@ -233,9 +242,12 @@ public class AuthorizationGrantNegativeTest extends AbstractBusClientServerTestB
             // expected
         }
     }
-    /*
+    
+    //
+    // JWT Authorization grants
+    //
     @org.junit.Test
-    public void testJWTAuthorizationGrant() throws Exception {
+    public void testJWTUnsigned() throws Exception {
         URL busFile = AuthorizationGrantNegativeTest.class.getResource("client.xml");
         
         String address = "https://localhost:" + PORT + "/services/";
@@ -243,6 +255,35 @@ public class AuthorizationGrantNegativeTest extends AbstractBusClientServerTestB
         
         // Create the JWT Token
         String token = createToken("DoubleItSTSIssuer", "consumer-id", 
+                                   "https://localhost:" + PORT + "/services/token", true, false);
+        
+        // Get Access Token
+        client.type("application/x-www-form-urlencoded").accept("application/json");
+        client.path("token");
+        
+        Form form = new Form();
+        form.param("grant_type", "urn:ietf:params:oauth:grant-type:jwt-bearer");
+        form.param("assertion", token);
+        form.param("client_id", "consumer-id");
+        Response response = client.post(form);
+        
+        try {
+            response.readEntity(ClientAccessToken.class);
+            fail("Failure expected on an unsigned token");
+        } catch (Exception ex) {
+            // expected
+        }
+    }
+    
+    @org.junit.Test
+    public void testJWTNoIssuer() throws Exception {
+        URL busFile = AuthorizationGrantNegativeTest.class.getResource("client.xml");
+        
+        String address = "https://localhost:" + PORT + "/services/";
+        WebClient client = WebClient.create(address, setupProviders(), "alice", "security", busFile.toString());
+        
+        // Create the JWT Token
+        String token = createToken(null, "consumer-id", 
                                    "https://localhost:" + PORT + "/services/token", true, true);
 
         // Get Access Token
@@ -255,11 +296,126 @@ public class AuthorizationGrantNegativeTest extends AbstractBusClientServerTestB
         form.param("client_id", "consumer-id");
         Response response = client.post(form);
         
-        ClientAccessToken accessToken = response.readEntity(ClientAccessToken.class);
-        assertNotNull(accessToken.getTokenKey());
-        assertNotNull(accessToken.getRefreshToken());
+        try {
+            response.readEntity(ClientAccessToken.class);
+            fail("Failure expected on no issuer");
+        } catch (Exception ex) {
+            // expected
+        }
+    }
+    
+    @org.junit.Test
+    public void testJWTNoExpiry() throws Exception {
+        URL busFile = AuthorizationGrantNegativeTest.class.getResource("client.xml");
+        
+        String address = "https://localhost:" + PORT + "/services/";
+        WebClient client = WebClient.create(address, setupProviders(), "alice", "security", busFile.toString());
+        
+        // Create the JWT Token
+        String token = createToken("DoubleItSTSIssuer", "consumer-id", 
+                                   "https://localhost:" + PORT + "/services/token", false, true);
+
+        // Get Access Token
+        client.type("application/x-www-form-urlencoded").accept("application/json");
+        client.path("token");
+        
+        Form form = new Form();
+        form.param("grant_type", "urn:ietf:params:oauth:grant-type:jwt-bearer");
+        form.param("assertion", token);
+        form.param("client_id", "consumer-id");
+        Response response = client.post(form);
+        
+        try {
+            response.readEntity(ClientAccessToken.class);
+            fail("Failure expected on no expiry");
+        } catch (Exception ex) {
+            // expected
+        }
+    }
+    
+    @org.junit.Test
+    public void testJWTBadAudienceRestriction() throws Exception {
+        URL busFile = AuthorizationGrantNegativeTest.class.getResource("client.xml");
+        
+        String address = "https://localhost:" + PORT + "/services/";
+        WebClient client = WebClient.create(address, setupProviders(), "alice", "security", busFile.toString());
+        
+        // Create the JWT Token
+        String token = createToken("DoubleItSTSIssuer", "consumer-id", 
+                                   "https://localhost:" + PORT + "/services/badtoken", true, true);
+
+        // Get Access Token
+        client.type("application/x-www-form-urlencoded").accept("application/json");
+        client.path("token");
+        
+        Form form = new Form();
+        form.param("grant_type", "urn:ietf:params:oauth:grant-type:jwt-bearer");
+        form.param("assertion", token);
+        form.param("client_id", "consumer-id");
+        Response response = client.post(form);
+        
+        try {
+            response.readEntity(ClientAccessToken.class);
+            fail("Failure expected on a bad audience restriction");
+        } catch (Exception ex) {
+            // expected
+        }
+    }
+    
+    @org.junit.Test
+    public void testJWTUnauthenticatedSignature() throws Exception {
+        URL busFile = AuthorizationGrantNegativeTest.class.getResource("client.xml");
+        
+        String address = "https://localhost:" + PORT + "/services/";
+        WebClient client = WebClient.create(address, setupProviders(), "alice", "security", busFile.toString());
+        
+        // Create the JWT Token
+        // Create the JWT Token
+        JwtClaims claims = new JwtClaims();
+        claims.setSubject("consumer-id");
+        claims.setIssuer("DoubleItSTSIssuer");
+        claims.setIssuedAt(new Date().getTime() / 1000L);
+        Calendar cal = Calendar.getInstance();
+        cal.add(Calendar.SECOND, 60);
+        claims.setExpiryTime(cal.getTimeInMillis() / 1000L);
+        String audience = "https://localhost:" + PORT + "/services/token";
+        claims.setAudiences(Collections.singletonList(audience));
+        
+        // Sign the JWT Token
+        Properties signingProperties = new Properties();
+        signingProperties.put("rs.security.keystore.type", "jks");
+        signingProperties.put("rs.security.keystore.password", "security");
+        signingProperties.put("rs.security.keystore.alias", "smallkey");
+        signingProperties.put("rs.security.keystore.file", 
+            "org/apache/cxf/systest/jaxrs/security/certs/smallkeysize.jks");
+        signingProperties.put("rs.security.key.password", "security");
+        signingProperties.put("rs.security.signature.algorithm", "RS256");
+
+        JwsHeaders jwsHeaders = new JwsHeaders(signingProperties);
+        JwsJwtCompactProducer jws = new JwsJwtCompactProducer(jwsHeaders, claims);
+
+        JwsSignatureProvider sigProvider = 
+            JwsUtils.loadSignatureProvider(signingProperties, jwsHeaders);
+
+        String token = jws.signWith(sigProvider);
+        
+        // Get Access Token
+        client.type("application/x-www-form-urlencoded").accept("application/json");
+        client.path("token");
+        
+        Form form = new Form();
+        form.param("grant_type", "urn:ietf:params:oauth:grant-type:jwt-bearer");
+        form.param("assertion", token);
+        form.param("client_id", "consumer-id");
+        Response response = client.post(form);
+        
+        try {
+            response.readEntity(ClientAccessToken.class);
+            fail("Failure expected on an unauthenticated token");
+        } catch (Exception ex) {
+            // expected
+        }
     }
-    */
     
     private List<Object> setupProviders() {
         List<Object> providers = new ArrayList<Object>();
@@ -298,7 +454,7 @@ public class AuthorizationGrantNegativeTest extends AbstractBusClientServerTestB
         
         return samlAssertion.assertionToString();
     }
-    /*
+    
     private String createToken(String issuer, String subject, String audience, 
                                boolean expiry, boolean sign) {
         // Create the JWT Token
@@ -341,5 +497,4 @@ public class AuthorizationGrantNegativeTest extends AbstractBusClientServerTestB
         JwsJwtCompactProducer jws = new JwsJwtCompactProducer(jwsHeaders, claims);
         return jws.getSignedEncodedJws();
     }
-    */
 }

http://git-wip-us.apache.org/repos/asf/cxf/blob/f346c805/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 fad85b4..8ce2a30 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
@@ -319,6 +319,7 @@ public class AuthorizationGrantTest extends AbstractBusClientServerTestBase {
         assertNotNull(accessToken.getTokenKey());
         assertNotNull(accessToken.getRefreshToken());
     }
+    
     private String getAuthorizationCode(WebClient client) {
         return getAuthorizationCode(client, null);
     }