keycloak-uncached

filter oidc broker import keys

4/24/2015 4:03:20 PM

Details

diff --git a/broker/oidc/src/main/java/org/keycloak/broker/oidc/OIDCIdentityProviderFactory.java b/broker/oidc/src/main/java/org/keycloak/broker/oidc/OIDCIdentityProviderFactory.java
index 7c3335e..6c57274 100755
--- a/broker/oidc/src/main/java/org/keycloak/broker/oidc/OIDCIdentityProviderFactory.java
+++ b/broker/oidc/src/main/java/org/keycloak/broker/oidc/OIDCIdentityProviderFactory.java
@@ -21,6 +21,7 @@ import org.keycloak.broker.oidc.util.SimpleHttp;
 import org.keycloak.broker.provider.AbstractIdentityProviderFactory;
 import org.keycloak.jose.jwk.JWK;
 import org.keycloak.jose.jwk.JWKParser;
+import org.keycloak.jose.jws.Algorithm;
 import org.keycloak.models.IdentityProviderModel;
 import org.keycloak.models.utils.KeycloakModelUtils;
 import org.keycloak.protocol.oidc.representations.JSONWebKeySet;
@@ -80,7 +81,7 @@ public class OIDCIdentityProviderFactory extends AbstractIdentityProviderFactory
                 JSONWebKeySet keySet = JsonSerialization.readValue(keySetString, JSONWebKeySet.class);
                 for (JWK jwk : keySet.getKeys()) {
                     JWKParser parse = JWKParser.create(jwk);
-                    if (parse.getJwk().getPublicKeyUse().equals(JWK.SIG_USE)) {
+                    if (parse.getJwk().getPublicKeyUse().equals(JWK.SIG_USE) && keyTypeSupported(jwk.getKeyType())) {
                         PublicKey key = parse.toPublicKey();
                         config.setPublicKeySignatureVerifier(KeycloakModelUtils.getPemFromKey(key));
                         config.setValidateSignature(true);
@@ -95,4 +96,8 @@ public class OIDCIdentityProviderFactory extends AbstractIdentityProviderFactory
         }
         return config.getConfig();
     }
+
+    protected static boolean keyTypeSupported(String type) {
+        return type != null && type.equals("RSA");
+    }
 }
diff --git a/broker/oidc/src/test/java/org/keycloak/broker/oidc/OIDCIdentityProviderTest.java b/broker/oidc/src/test/java/org/keycloak/broker/oidc/OIDCIdentityProviderTest.java
new file mode 100755
index 0000000..5de115e
--- /dev/null
+++ b/broker/oidc/src/test/java/org/keycloak/broker/oidc/OIDCIdentityProviderTest.java
@@ -0,0 +1,26 @@
+package org.keycloak.broker.oidc;
+
+import org.junit.Test;
+
+/**
+ * @author <a href="mailto:bill@burkecentral.com">Bill Burke</a>
+ * @version $Revision: 1 $
+ */
+public class OIDCIdentityProviderTest {
+
+    @Test
+    public void testUnsupportedKeyInput() throws Exception {
+        String json = "{" +
+                "\"version\":\"3.0\"," +
+                "\"issuer\":\"https://server.com:443\"," +
+                "\"authorization_endpoint\":\"https://server.com:443/oauth2\"," +
+                "\"token_endpoint\":\"https://server.com:443/token\"," +
+                "\"revocation_endpoint\":\"https://server.com:443/revoke\"," +
+                "\"userinfo_endpoint\":\"https://server.com:443/userinfo\"," +
+                "\"jwks_uri\":\"https://server.com:443/JWKS\"," +
+                "\"scopes_supported\"[\"phone\",\"address\",\"email\",\"openid\",\"profile\"]," +
+                "\"response_types_supported\":[\"code\",\"token\",\"id_token\",\"code token\",\"code id_token\",\"token id_token\",\"code token id_token\"]," +
+                "\"subject_types_supported\":[\"public\"]," +
+                "\"id_token_signing_alg_values_supported\":[\"HS256\",\"HS384\",\"HS512\",\"RS256\",\"RS384\",\"RS512\",\"ES256\",\"ES84\",\"ES512\"]} ";
+    }
+}