From 1514b2d2e06b0e9ec52b8b1351857d2e10fca141 Mon Sep 17 00:00:00 2001 From: William Kim <wkim@mitre.org> Date: Mon, 26 Aug 2013 15:33:00 -0400 Subject: [PATCH] Revert "placeholder" This reverts commit d763a954da5e13d42851ba0e085cdf8f0e710ce3. --- .../org/mitre/jwt/signer/PlainSigner.java | 2 +- .../org/mitre/jwt/signer/PlainVerifier.java | 14 +--- ...DefaultJwtSigningAndValidationService.java | 75 ++++--------------- 3 files changed, 15 insertions(+), 76 deletions(-) diff --git a/openid-connect-common/src/main/java/org/mitre/jwt/signer/PlainSigner.java b/openid-connect-common/src/main/java/org/mitre/jwt/signer/PlainSigner.java index bd47401ae..1252a79ee 100644 --- a/openid-connect-common/src/main/java/org/mitre/jwt/signer/PlainSigner.java +++ b/openid-connect-common/src/main/java/org/mitre/jwt/signer/PlainSigner.java @@ -33,7 +33,7 @@ import com.nimbusds.jose.util.Base64URL; * @author wkim * */ -public final class PlainSigner implements JWSSigner { +public class PlainSigner implements JWSSigner { @Override diff --git a/openid-connect-common/src/main/java/org/mitre/jwt/signer/PlainVerifier.java b/openid-connect-common/src/main/java/org/mitre/jwt/signer/PlainVerifier.java index 56486d14c..b689eb54d 100644 --- a/openid-connect-common/src/main/java/org/mitre/jwt/signer/PlainVerifier.java +++ b/openid-connect-common/src/main/java/org/mitre/jwt/signer/PlainVerifier.java @@ -28,7 +28,6 @@ import com.nimbusds.jose.PlainHeader; import com.nimbusds.jose.ReadOnlyJWSHeader; import com.nimbusds.jose.Requirement; import com.nimbusds.jose.util.Base64URL; -import com.nimbusds.jwt.PlainJWT; /** * Verifier to support "alg:none" JWS signing option (no signature). @@ -36,7 +35,7 @@ import com.nimbusds.jwt.PlainJWT; * @author wkim * */ -public final class PlainVerifier implements JWSVerifier { +public class PlainVerifier implements JWSVerifier { // the NONE alg constant lives in the Algorithm superclass of JWSAlgorithm, not allowing its use as a JWSAlgorithm object. // redefining the constant here for convenience. @@ -78,16 +77,5 @@ public final class PlainVerifier implements JWSVerifier { } } - - /** - * Verifies that the third signature component of the JWT is null. - * - * @param jwt - * @return - */ - public static boolean verify(PlainJWT jwt) { - - return jwt.getParsedParts()[2] == null; - } } diff --git a/openid-connect-common/src/main/java/org/mitre/jwt/signer/service/impl/DefaultJwtSigningAndValidationService.java b/openid-connect-common/src/main/java/org/mitre/jwt/signer/service/impl/DefaultJwtSigningAndValidationService.java index 468396003..cd1f083b5 100644 --- a/openid-connect-common/src/main/java/org/mitre/jwt/signer/service/impl/DefaultJwtSigningAndValidationService.java +++ b/openid-connect-common/src/main/java/org/mitre/jwt/signer/service/impl/DefaultJwtSigningAndValidationService.java @@ -27,8 +27,6 @@ import java.util.Set; import javax.annotation.PostConstruct; import org.mitre.jose.keystore.JWKSetKeyStore; -import org.mitre.jwt.signer.PlainSigner; -import org.mitre.jwt.signer.PlainVerifier; import org.mitre.jwt.signer.service.JwtSigningAndValidationService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -38,7 +36,6 @@ import com.nimbusds.jose.JOSEException; import com.nimbusds.jose.JWSAlgorithm; import com.nimbusds.jose.JWSSigner; import com.nimbusds.jose.JWSVerifier; -import com.nimbusds.jose.PlainHeader; import com.nimbusds.jose.crypto.MACSigner; import com.nimbusds.jose.crypto.MACVerifier; import com.nimbusds.jose.crypto.RSASSASigner; @@ -47,14 +44,10 @@ import com.nimbusds.jose.jwk.ECKey; import com.nimbusds.jose.jwk.JWK; import com.nimbusds.jose.jwk.OctetSequenceKey; import com.nimbusds.jose.jwk.RSAKey; -import com.nimbusds.jwt.JWT; -import com.nimbusds.jwt.PlainJWT; import com.nimbusds.jwt.SignedJWT; public class DefaultJwtSigningAndValidationService implements JwtSigningAndValidationService { - public static final String ALG_NONE = "none"; // TODO storing a default "alg:none" id smells a bit.. - // map of identifier to signer private Map<String, JWSSigner> signers = new HashMap<String, JWSSigner>(); @@ -163,11 +156,6 @@ public class DefaultJwtSigningAndValidationService implements JwtSigningAndValid * @throws NoSuchAlgorithmException If there is no appropriate algorithm to tie the keys to. */ private void buildSignersAndVerifiers() throws NoSuchAlgorithmException, InvalidKeySpecException { - - signers.put(ALG_NONE, new PlainSigner()); - verifiers.put(ALG_NONE, new PlainVerifier()); - - for (Map.Entry<String, JWK> jwkEntry : keys.entrySet()) { String id = jwkEntry.getKey(); @@ -211,7 +199,7 @@ public class DefaultJwtSigningAndValidationService implements JwtSigningAndValid * Sign a jwt in place using the configured default signer. */ @Override - public void signJwt(JWT jwt) { + public void signJwt(SignedJWT jwt) { if (getDefaultSignerKeyId() == null) { throw new IllegalStateException("Tried to call default signing with no default signer ID set"); } @@ -219,22 +207,7 @@ public class DefaultJwtSigningAndValidationService implements JwtSigningAndValid JWSSigner signer = signers.get(getDefaultSignerKeyId()); try { - - // the sign() method is not a part of the JWT interface, - // hence this if/else structure. - if (signer instanceof PlainSigner) { - - if (!(jwt instanceof PlainJWT)) { - throw new JOSEException("This JWT object is not a plain JWT."); - } - - // At this point, this is a plain JWT and is already good-to-go. - - } else { // we have a signable JWS at this point. - - ((SignedJWT) jwt).sign(signer); - - } + jwt.sign(signer); } catch (JOSEException e) { logger.error("Failed to sign JWT, error was: ", e); @@ -243,7 +216,7 @@ public class DefaultJwtSigningAndValidationService implements JwtSigningAndValid } @Override - public void signJwt(JWT jwt, JWSAlgorithm alg) { + public void signJwt(SignedJWT jwt, JWSAlgorithm alg) { JWSSigner signer = null; @@ -254,43 +227,23 @@ public class DefaultJwtSigningAndValidationService implements JwtSigningAndValid } } - try { + if (signer == null) { + //If we can't find an algorithm that matches, we can't sign + logger.error("No matching algirthm found for alg=" + alg); + + } - if (signer == null) { - //If we can't find an algorithm that matches, we can't sign - logger.error("No matching algirthm found for alg=" + alg); - - } else if (signer instanceof PlainSigner) { - - if (!(jwt.getHeader() instanceof PlainHeader)) { - - throw new JOSEException("Invalid header. This signer is for use with Plain JWTs only."); - - } - - // do nothing because PlainJWT is good already. - - } else { // we have a signable JWS at this point. - - ((SignedJWT) jwt).sign(signer); - - } - + try { + jwt.sign(signer); } catch (JOSEException e) { - + logger.error("Failed to sign JWT, error was: ", e); } + } @Override - public boolean validateSignature(JWT jwt) { - - if (getDefaultSigningAlgorithm().equals(JWSAlgorithm.NONE) { - - if (jwt instanceof PlainJWT) { - return - } - } + public boolean validateSignature(SignedJWT jwt) { for (JWSVerifier verifier : verifiers.values()) { try { @@ -328,8 +281,6 @@ public class DefaultJwtSigningAndValidationService implements JwtSigningAndValid public Collection<JWSAlgorithm> getAllSigningAlgsSupported() { Set<JWSAlgorithm> algs = new HashSet<JWSAlgorithm>(); - - //TODO add 'none' for (JWSSigner signer : signers.values()) { algs.addAll(signer.supportedAlgorithms());