keycloak-memoizeit

Merge pull request #389 from jeroenr/master Improved exception

5/16/2014 7:34:18 AM

Details

diff --git a/core/src/main/java/org/keycloak/RSATokenVerifier.java b/core/src/main/java/org/keycloak/RSATokenVerifier.java
index b4cb1cf..0a55fd1 100755
--- a/core/src/main/java/org/keycloak/RSATokenVerifier.java
+++ b/core/src/main/java/org/keycloak/RSATokenVerifier.java
@@ -16,29 +16,22 @@ public class RSATokenVerifier {
         return verifyToken(tokenString, realmKey, realm, true);
     }
 
-
     public static AccessToken verifyToken(String tokenString, PublicKey realmKey, String realm, boolean checkActive) throws VerificationException {
         JWSInput input = new JWSInput(tokenString);
-        boolean verified = false;
-        try {
-            verified = RSAProvider.verify(input, realmKey);
-        } catch (Exception ignore) {
-
-        }
-        if (!verified) throw new VerificationException("Token signature not validated");
+        if (!isPublicKeyValid(input, realmKey)) throw new VerificationException("Invalid token signature.");
 
         AccessToken token;
         try {
             token = input.readJsonContent(AccessToken.class);
         } catch (IOException e) {
-            throw new VerificationException(e);
+            throw new VerificationException("Couldn't parse token signature", e);
         }
         String user = token.getSubject();
         if (user == null) {
-            throw new VerificationException("Token user was null");
+            throw new VerificationException("Token user was null.");
         }
         if (!realm.equals(token.getAudience())) {
-            throw new VerificationException("Token audience doesn't match domain");
+            throw new VerificationException("Token audience doesn't match domain.");
 
         }
         if (checkActive && !token.isActive()) {
@@ -47,4 +40,12 @@ public class RSATokenVerifier {
 
         return token;
     }
+
+    private static boolean isPublicKeyValid(JWSInput input, PublicKey realmKey) throws VerificationException {
+        try {
+            return RSAProvider.verify(input, realmKey);
+        } catch (Exception e) {
+            throw new VerificationException("Token signature not validated.", e);
+        }
+    }
 }