diff --git a/openid-connect-common/.settings/org.eclipse.wst.common.component b/openid-connect-common/.settings/org.eclipse.wst.common.component
index 4a3e4abda..1e24c2b7c 100644
--- a/openid-connect-common/.settings/org.eclipse.wst.common.component
+++ b/openid-connect-common/.settings/org.eclipse.wst.common.component
@@ -2,6 +2,5 @@
-
diff --git a/openid-connect-server/src/main/java/org/mitre/jwt/signer/service/JwtSigningAndValidationService.java b/openid-connect-server/src/main/java/org/mitre/jwt/signer/service/JwtSigningAndValidationService.java
index 624327f41..d4e747cec 100644
--- a/openid-connect-server/src/main/java/org/mitre/jwt/signer/service/JwtSigningAndValidationService.java
+++ b/openid-connect-server/src/main/java/org/mitre/jwt/signer/service/JwtSigningAndValidationService.java
@@ -2,17 +2,18 @@ package org.mitre.jwt.signer.service;
import java.security.PublicKey;
import java.util.List;
+import java.util.Map;
import org.mitre.jwt.model.Jwt;
public interface JwtSigningAndValidationService {
/**
- * Returns all public keys this service is configured with.
+ * Returns all public keys this service is configured with, indexed by key id
*
* @return
*/
- public List getAllPublicKeys();
+ public Map getAllPublicKeys();
/**
* Check to see if this JWT has expired or not
diff --git a/openid-connect-server/src/main/java/org/mitre/jwt/signer/service/impl/JwtSigningAndValidationServiceDefault.java b/openid-connect-server/src/main/java/org/mitre/jwt/signer/service/impl/JwtSigningAndValidationServiceDefault.java
index 782b247d5..6e6bf3bc9 100644
--- a/openid-connect-server/src/main/java/org/mitre/jwt/signer/service/impl/JwtSigningAndValidationServiceDefault.java
+++ b/openid-connect-server/src/main/java/org/mitre/jwt/signer/service/impl/JwtSigningAndValidationServiceDefault.java
@@ -25,7 +25,8 @@ public class JwtSigningAndValidationServiceDefault implements
@Autowired
private ConfigurationPropertiesBean configBean;
- private List extends JwtSigner> signers = new ArrayList();
+ // map of identifier to signer
+ private Map signers = new HashMap();
private static Log logger = LogFactory
.getLog(JwtSigningAndValidationServiceDefault.class);
@@ -43,7 +44,7 @@ public class JwtSigningAndValidationServiceDefault implements
* List of JwtSigners to associate with this service
*/
public JwtSigningAndValidationServiceDefault(
- List extends JwtSigner> signer) {
+ Map signer) {
setSigners(signer);
}
@@ -72,23 +73,25 @@ public class JwtSigningAndValidationServiceDefault implements
* ()
*/
@Override
- public List getAllPublicKeys() {
+ public Map getAllPublicKeys() {
Map map = new HashMap();
PublicKey publicKey;
- for (JwtSigner signer : signers) {
+ for (JwtSigner signer : signers.values()) {
if (signer instanceof RsaSigner) {
publicKey = ((RsaSigner) signer).getPublicKey();
- if (publicKey != null)
+ if (publicKey != null) {
+ // what's the index of this map for?
map.put(((RSAPublicKey) publicKey).getModulus()
.toString(16).toUpperCase()
+ ((RSAPublicKey) publicKey).getPublicExponent()
.toString(16).toUpperCase(), publicKey);
+ }
} else if (signer instanceof EcdsaSigner) {
@@ -96,8 +99,7 @@ public class JwtSigningAndValidationServiceDefault implements
}
}
- return new ArrayList(map.values());
-
+ return map;
}
/**
@@ -105,7 +107,7 @@ public class JwtSigningAndValidationServiceDefault implements
*
* @return
*/
- public List extends JwtSigner> getSigners() {
+ public Map getSigners() {
return signers;
}
@@ -134,7 +136,7 @@ public class JwtSigningAndValidationServiceDefault implements
* @param signers
* List of JwtSigners to associate with this service
*/
- public void setSigners(List extends JwtSigner> signers) {
+ public void setSigners(Map signers) {
this.signers = signers;
}
@@ -175,7 +177,7 @@ public class JwtSigningAndValidationServiceDefault implements
@Override
public boolean validateSignature(String jwtString) {
- for (JwtSigner signer : signers) {
+ for (JwtSigner signer : signers.values()) {
if (signer.verify(jwtString))
return true;
}
diff --git a/openid-connect-server/src/main/java/org/mitre/jwt/signer/service/impl/KeyStore.java b/openid-connect-server/src/main/java/org/mitre/jwt/signer/service/impl/KeyStore.java
index 9592316e7..78ba7d5cc 100644
--- a/openid-connect-server/src/main/java/org/mitre/jwt/signer/service/impl/KeyStore.java
+++ b/openid-connect-server/src/main/java/org/mitre/jwt/signer/service/impl/KeyStore.java
@@ -32,13 +32,6 @@ public class KeyStore implements InitializingBean {
private java.security.KeyStore keystore;
- /**
- * default constructor
- */
- public KeyStore() {
- this(PASSWORD, null);
- }
-
/**
* KeyStore constructor
*
diff --git a/openid-connect-server/src/main/java/org/mitre/openid/connect/view/JwkKeyListView.java b/openid-connect-server/src/main/java/org/mitre/openid/connect/view/JwkKeyListView.java
index 399f2919f..08aa2567c 100644
--- a/openid-connect-server/src/main/java/org/mitre/openid/connect/view/JwkKeyListView.java
+++ b/openid-connect-server/src/main/java/org/mitre/openid/connect/view/JwkKeyListView.java
@@ -76,7 +76,7 @@ public class JwkKeyListView extends AbstractView {
o.addProperty("alg", "RSA");
o.addProperty("mod", m64);
o.addProperty("exp", e64);
-
+ // TODO: get the key ID from the map
return o;
} else if (src instanceof ECPublicKey) {
diff --git a/openid-connect-server/src/main/java/org/mitre/openid/connect/web/JsonWebKeyEndpoint.java b/openid-connect-server/src/main/java/org/mitre/openid/connect/web/JsonWebKeyEndpoint.java
index 1973e1ded..aabc48265 100644
--- a/openid-connect-server/src/main/java/org/mitre/openid/connect/web/JsonWebKeyEndpoint.java
+++ b/openid-connect-server/src/main/java/org/mitre/openid/connect/web/JsonWebKeyEndpoint.java
@@ -1,6 +1,7 @@
package org.mitre.openid.connect.web;
import java.security.PublicKey;
+import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -20,7 +21,7 @@ public class JsonWebKeyEndpoint {
@RequestMapping("/jwk")
public ModelAndView getJwk() {
- List keys = jwtService.getAllPublicKeys();
+ Collection keys = jwtService.getAllPublicKeys().values();
// TODO: check if keys are empty, return a 404 here or just an empty list?
diff --git a/openid-connect-server/src/main/webapp/WEB-INF/spring/application-context.xml b/openid-connect-server/src/main/webapp/WEB-INF/spring/application-context.xml
index 3cdc1a74e..080631f80 100644
--- a/openid-connect-server/src/main/webapp/WEB-INF/spring/application-context.xml
+++ b/openid-connect-server/src/main/webapp/WEB-INF/spring/application-context.xml
@@ -119,12 +119,40 @@
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/openid-connect-server/src/test/resources/test-context.xml b/openid-connect-server/src/test/resources/test-context.xml
index 2f32e8191..84142e3c9 100644
--- a/openid-connect-server/src/test/resources/test-context.xml
+++ b/openid-connect-server/src/test/resources/test-context.xml
@@ -37,6 +37,10 @@
-
+
+
+
+
+
\ No newline at end of file