You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by pl...@apache.org on 2015/11/04 09:25:59 UTC
[33/48] directory-kerby git commit: Adding some JWT tests
Adding some JWT tests
Project: http://git-wip-us.apache.org/repos/asf/directory-kerby/repo
Commit: http://git-wip-us.apache.org/repos/asf/directory-kerby/commit/b4c2b2dd
Tree: http://git-wip-us.apache.org/repos/asf/directory-kerby/tree/b4c2b2dd
Diff: http://git-wip-us.apache.org/repos/asf/directory-kerby/diff/b4c2b2dd
Branch: refs/heads/pkinit-support
Commit: b4c2b2ddd00aa972c192f1f8097344442d237e49
Parents: 49482c4
Author: Colm O hEigeartaigh <co...@apache.org>
Authored: Wed Oct 21 17:49:52 2015 +0100
Committer: Colm O hEigeartaigh <co...@apache.org>
Committed: Wed Oct 21 17:49:52 2015 +0100
----------------------------------------------------------------------
.../kerberos/kdc/WithAccessTokenKdcTest.java | 69 ++++++++++++++++++--
.../kerberos/kdc/WithIdentityTokenKdcTest.java | 63 +++++++++++++++++-
.../kerberos/kdc/WithTokenKdcTestBase.java | 32 +++++----
.../kerb/server/preauth/token/TokenPreauth.java | 2 +-
4 files changed, 143 insertions(+), 23 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/b4c2b2dd/kerby-kdc-test/src/test/java/org/apache/kerby/kerberos/kdc/WithAccessTokenKdcTest.java
----------------------------------------------------------------------
diff --git a/kerby-kdc-test/src/test/java/org/apache/kerby/kerberos/kdc/WithAccessTokenKdcTest.java b/kerby-kdc-test/src/test/java/org/apache/kerby/kerberos/kdc/WithAccessTokenKdcTest.java
index d815e37..d623098 100644
--- a/kerby-kdc-test/src/test/java/org/apache/kerby/kerberos/kdc/WithAccessTokenKdcTest.java
+++ b/kerby-kdc-test/src/test/java/org/apache/kerby/kerberos/kdc/WithAccessTokenKdcTest.java
@@ -19,7 +19,13 @@
*/
package org.apache.kerby.kerberos.kdc;
+import java.io.InputStream;
+import java.security.PrivateKey;
+
+import org.apache.kerby.kerberos.kerb.KrbException;
+import org.apache.kerby.kerberos.kerb.common.PrivateKeyReader;
import org.apache.kerby.kerberos.kerb.spec.ticket.ServiceTicket;
+import org.junit.Assert;
import org.junit.Test;
public class WithAccessTokenKdcTest extends WithTokenKdcTestBase {
@@ -27,12 +33,65 @@ public class WithAccessTokenKdcTest extends WithTokenKdcTestBase {
@Test
public void testRequestServiceTicketWithAccessToken() throws Exception {
prepareToken(getServerPrincipal());
+ performTest();
+ }
+
+ @Test
+ public void testBadIssuer() throws Exception {
+ InputStream is = WithTokenKdcTestBase.class.getResourceAsStream("/private_key.pem");
+ PrivateKey privateKey = PrivateKeyReader.loadPrivateKey(is);
+ prepareToken(getServerPrincipal(), "oauth1.com", AUDIENCE, privateKey);
+
+ try {
+ performTest();
+ Assert.fail("Failure expected on a bad issuer value");
+ } catch (Exception ex) {
+ // expected
+ Assert.assertTrue(ex instanceof KrbException);
+ }
+ }
+
+ // TODO - not failing yet.
+ @Test
+ @org.junit.Ignore
+ public void testBadAudienceRestriction() throws Exception {
+ InputStream is = WithTokenKdcTestBase.class.getResourceAsStream("/private_key.pem");
+ PrivateKey privateKey = PrivateKeyReader.loadPrivateKey(is);
+ prepareToken(getServerPrincipal(), ISSUER, "krbtgt2@EXAMPLE.COM", privateKey);
+
+ try {
+ performTest();
+ Assert.fail("Failure expected on a bad audience restriction value");
+ } catch (Exception ex) {
+ // expected
+ Assert.assertTrue(ex instanceof KrbException);
+ }
+ }
+
+ // TODO - not failing yet.
+ @Test
+ @org.junit.Ignore
+ public void testUnsignedToken() throws Exception {
+ prepareToken(getServerPrincipal(), ISSUER, AUDIENCE, null);
+
+ try {
+ performTest();
+ Assert.fail("Failure expected on an unsigned token");
+ } catch (Exception ex) {
+ // expected
+ Assert.assertTrue(ex instanceof KrbException);
+ }
+ }
+
+ private void performTest() throws Exception {
createCredentialCache(getClientPrincipal(), getClientPassword());
- ServiceTicket serviceTicket = getKrbClient().requestServiceTicketWithAccessToken(
- getKrbToken(), getServerPrincipal(), getcCacheFile().getPath());
- verifyTicket(serviceTicket);
-
- deleteCcacheFile();
+ try {
+ ServiceTicket serviceTicket = getKrbClient().requestServiceTicketWithAccessToken(
+ getKrbToken(), getServerPrincipal(), getcCacheFile().getPath());
+ verifyTicket(serviceTicket);
+ } finally {
+ deleteCcacheFile();
+ }
}
}
http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/b4c2b2dd/kerby-kdc-test/src/test/java/org/apache/kerby/kerberos/kdc/WithIdentityTokenKdcTest.java
----------------------------------------------------------------------
diff --git a/kerby-kdc-test/src/test/java/org/apache/kerby/kerberos/kdc/WithIdentityTokenKdcTest.java b/kerby-kdc-test/src/test/java/org/apache/kerby/kerberos/kdc/WithIdentityTokenKdcTest.java
index 045da51..73e7820 100644
--- a/kerby-kdc-test/src/test/java/org/apache/kerby/kerberos/kdc/WithIdentityTokenKdcTest.java
+++ b/kerby-kdc-test/src/test/java/org/apache/kerby/kerberos/kdc/WithIdentityTokenKdcTest.java
@@ -20,11 +20,14 @@
package org.apache.kerby.kerberos.kdc;
import org.apache.kerby.kerberos.kerb.KrbException;
+import org.apache.kerby.kerberos.kerb.common.PrivateKeyReader;
import org.apache.kerby.kerberos.kerb.spec.ticket.ServiceTicket;
import org.apache.kerby.kerberos.kerb.spec.ticket.TgtTicket;
+import org.junit.Assert;
import org.junit.Test;
-import static org.assertj.core.api.Assertions.assertThat;
+import java.io.InputStream;
+import java.security.PrivateKey;
public class WithIdentityTokenKdcTest extends WithTokenKdcTestBase {
@@ -32,6 +35,58 @@ public class WithIdentityTokenKdcTest extends WithTokenKdcTestBase {
public void testKdc() throws Exception {
prepareToken(null);
+ performTest();
+ }
+
+ @Test
+ public void testBadIssuer() throws Exception {
+ InputStream is = WithTokenKdcTestBase.class.getResourceAsStream("/private_key.pem");
+ PrivateKey privateKey = PrivateKeyReader.loadPrivateKey(is);
+ prepareToken(null, "oauth1.com", AUDIENCE, privateKey);
+
+ try {
+ performTest();
+ Assert.fail("Failure expected on a bad issuer value");
+ } catch (Exception ex) {
+ // expected
+ Assert.assertTrue(ex instanceof KrbException);
+ }
+ }
+
+ // TODO - not failing yet.
+ @Test
+ @org.junit.Ignore
+ public void testBadAudienceRestriction() throws Exception {
+ InputStream is = WithTokenKdcTestBase.class.getResourceAsStream("/private_key.pem");
+ PrivateKey privateKey = PrivateKeyReader.loadPrivateKey(is);
+ prepareToken(null, ISSUER, "krbtgt2@EXAMPLE.COM", privateKey);
+
+ try {
+ performTest();
+ Assert.fail("Failure expected on a bad audience restriction value");
+ } catch (Exception ex) {
+ // expected
+ Assert.assertTrue(ex instanceof KrbException);
+ }
+ }
+
+ // TODO - not failing yet.
+ @Test
+ @org.junit.Ignore
+ public void testUnsignedToken() throws Exception {
+ prepareToken(null, ISSUER, "krbtgt2@EXAMPLE.COM", null);
+
+ try {
+ performTest();
+ Assert.fail("Failure expected on an unsigned token");
+ } catch (Exception ex) {
+ // expected
+ Assert.assertTrue(ex instanceof KrbException);
+ }
+ }
+
+ private void performTest() throws Exception {
+
createCredentialCache(getClientPrincipal(), getClientPassword());
TgtTicket tgt = null;
@@ -39,8 +94,10 @@ public class WithIdentityTokenKdcTest extends WithTokenKdcTestBase {
tgt = getKrbClient().requestTgtWithToken(getKrbToken(),
getcCacheFile().getPath());
} catch (KrbException e) {
- assertThat(e.getMessage().contains("timeout")).isTrue();
- return;
+ if (e.getMessage().contains("timeout")) {
+ return;
+ }
+ throw e;
}
verifyTicket(tgt);
http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/b4c2b2dd/kerby-kdc-test/src/test/java/org/apache/kerby/kerberos/kdc/WithTokenKdcTestBase.java
----------------------------------------------------------------------
diff --git a/kerby-kdc-test/src/test/java/org/apache/kerby/kerberos/kdc/WithTokenKdcTestBase.java b/kerby-kdc-test/src/test/java/org/apache/kerby/kerberos/kdc/WithTokenKdcTestBase.java
index 9c0a8a2..8db50f9 100644
--- a/kerby-kdc-test/src/test/java/org/apache/kerby/kerberos/kdc/WithTokenKdcTestBase.java
+++ b/kerby-kdc-test/src/test/java/org/apache/kerby/kerberos/kdc/WithTokenKdcTestBase.java
@@ -40,7 +40,6 @@ import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.security.PrivateKey;
-import java.security.interfaces.RSAPrivateKey;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@@ -77,10 +76,23 @@ public class WithTokenKdcTestBase extends KdcTestBase {
protected File getcCacheFile() {
return cCacheFile;
}
-
+
protected AuthToken prepareToken(String servicePrincipal) {
+ InputStream is = WithTokenKdcTestBase.class.getResourceAsStream("/private_key.pem");
+ PrivateKey privateKey = null;
+ try {
+ privateKey = PrivateKeyReader.loadPrivateKey(is);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+
+ return prepareToken(servicePrincipal, ISSUER, AUDIENCE, privateKey);
+ }
+
+ protected AuthToken prepareToken(String servicePrincipal, String issuer, String audience,
+ PrivateKey signingKey) {
AuthToken authToken = KrbRuntime.getTokenProvider().createTokenFactory().createToken();
- authToken.setIssuer(ISSUER);
+ authToken.setIssuer(issuer);
authToken.setSubject(SUBJECT);
authToken.addAttribute("group", GROUP);
@@ -90,7 +102,7 @@ public class WithTokenKdcTestBase extends KdcTestBase {
if (servicePrincipal != null) {
aud.add(servicePrincipal);
}
- aud.add(AUDIENCE);
+ aud.add(audience);
authToken.setAudiences(aud);
// Set expiration in 60 minutes
@@ -106,16 +118,8 @@ public class WithTokenKdcTestBase extends KdcTestBase {
TokenEncoder tokenEncoder = KrbRuntime.getTokenProvider().createTokenEncoder();
- if (tokenEncoder instanceof JwtTokenEncoder) {
- InputStream is = WithTokenKdcTestBase.class.getResourceAsStream("/private_key.pem");
- PrivateKey privateKey = null;
- try {
- privateKey = PrivateKeyReader.loadPrivateKey(is);
- } catch (Exception e) {
- e.printStackTrace();
- }
-
- ((JwtTokenEncoder) tokenEncoder).setSignKey((RSAPrivateKey) privateKey);
+ if (tokenEncoder instanceof JwtTokenEncoder && signingKey != null) {
+ ((JwtTokenEncoder) tokenEncoder).setSignKey(signingKey);
}
krbToken = new KrbToken();
http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/b4c2b2dd/kerby-kerb/kerb-server/src/main/java/org/apache/kerby/kerberos/kerb/server/preauth/token/TokenPreauth.java
----------------------------------------------------------------------
diff --git a/kerby-kerb/kerb-server/src/main/java/org/apache/kerby/kerberos/kerb/server/preauth/token/TokenPreauth.java b/kerby-kerb/kerb-server/src/main/java/org/apache/kerby/kerberos/kerb/server/preauth/token/TokenPreauth.java
index e5154ad..2e8e860 100644
--- a/kerby-kerb/kerb-server/src/main/java/org/apache/kerby/kerberos/kerb/server/preauth/token/TokenPreauth.java
+++ b/kerby-kerb/kerb-server/src/main/java/org/apache/kerby/kerberos/kerb/server/preauth/token/TokenPreauth.java
@@ -76,7 +76,7 @@ public class TokenPreauth extends AbstractPreauthPlugin {
TokenInfo tokenInfo = paTokenRequest.getTokenInfo();
String issuer = tokenInfo.getTokenVendor();
if (!(issuers.contains(issuer))) {
- throw new KrbException("Unconfigured issuer:" + issuer);
+ throw new KrbException("Unconfigured issuer: " + issuer);
}
TokenDecoder tokenDecoder = KrbRuntime.getTokenProvider().createTokenDecoder();
if (tokenDecoder instanceof JwtTokenDecoder) {