updated signed request filter to create jwt from parameters, sign it, create url for request, and send a redirect

pull/166/merge
Mike Derryberry 13 years ago committed by Justin Richer
parent b0eca780d1
commit 42a9b67f5e

@ -426,7 +426,7 @@ public class AbstractOIDCAuthenticationFilter extends
logger.debug("tokenEndpointURI = " + serverConfig.getTokenEndpointURI()); logger.debug("tokenEndpointURI = " + serverConfig.getTokenEndpointURI());
logger.debug("form = " + form); logger.debug("form = " + form);
} }
;
String jsonString = null; String jsonString = null;
try { try {
@ -716,7 +716,6 @@ public class AbstractOIDCAuthenticationFilter extends
return signingAndValidationService; return signingAndValidationService;
} else { } else {
// if we can't build a validation service, return null
return null; return null;
} }
} }

@ -1,12 +1,21 @@
package org.mitre.openid.connect.client; package org.mitre.openid.connect.client;
import java.io.IOException; import java.io.IOException;
import java.security.NoSuchAlgorithmException;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.ServletException; import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.mitre.jwt.model.Jwt;
import org.mitre.jwt.model.JwtClaims;
import org.mitre.jwt.model.JwtHeader;
import org.mitre.jwt.signer.JwsAlgorithm;
import org.mitre.jwt.signer.impl.HmacSigner;
import org.mitre.jwt.signer.impl.RsaSigner;
import org.mitre.openid.connect.config.OIDCServerConfiguration; import org.mitre.openid.connect.config.OIDCServerConfiguration;
import org.springframework.security.core.Authentication; import org.springframework.security.core.Authentication;
import org.springframework.security.core.AuthenticationException; import org.springframework.security.core.AuthenticationException;
@ -16,21 +25,12 @@ public class OIDCSignedRequestFilter extends AbstractOIDCAuthenticationFilter {
protected OIDCServerConfiguration oidcServerConfig; protected OIDCServerConfiguration oidcServerConfig;
/**
* OpenIdConnectSignedRequestFilter constructor
*/
protected OIDCSignedRequestFilter() { protected OIDCSignedRequestFilter() {
super(); super();
oidcServerConfig = new OIDCServerConfiguration(); oidcServerConfig = new OIDCServerConfiguration();
} }
/*
* (non-Javadoc)
*
* @see org.mitre.openid.connect.client.AbstractOIDCAuthenticationFilter#
* afterPropertiesSet()
*/
@Override @Override
public void afterPropertiesSet() { public void afterPropertiesSet() {
super.afterPropertiesSet(); super.afterPropertiesSet();
@ -49,14 +49,9 @@ public class OIDCSignedRequestFilter extends AbstractOIDCAuthenticationFilter {
Assert.notNull(oidcServerConfig.getClientSecret(), Assert.notNull(oidcServerConfig.getClientSecret(),
"A Client Secret must be supplied"); "A Client Secret must be supplied");
} }
/* //SCREW WITH THIS...
* (non-Javadoc) //rather than sending over parameters, make request object and send that.
*
* @see org.mitre.openid.connect.client.AbstractOIDCAuthenticationFilter#
* attemptAuthentication(javax.servlet.http.HttpServletRequest,
* javax.servlet.http.HttpServletResponse)
*/
@Override @Override
public Authentication attemptAuthentication(HttpServletRequest request, public Authentication attemptAuthentication(HttpServletRequest request,
HttpServletResponse response) throws AuthenticationException, HttpServletResponse response) throws AuthenticationException,
@ -79,13 +74,67 @@ public class OIDCSignedRequestFilter extends AbstractOIDCAuthenticationFilter {
e.printStackTrace(); e.printStackTrace();
} }
} else { } else if (StringUtils.isNotBlank(request.getParameter("token"))) {
handleAuthorizationRequest(request, response, oidcServerConfig); handleAuthorizationRequest(request, response, oidcServerConfig);
} }
return null; return null;
} }
@Override
public void handleAuthorizationRequest(HttpServletRequest request, HttpServletResponse response,
OIDCServerConfiguration serverConfiguration) throws IOException {
if(StringUtils.isNotBlank(request.getParameter("token"))) {
Jwt jwt = new Jwt();
JwtHeader header = jwt.getHeader();
JwtClaims claims = jwt.getClaims();
//set parameters to JwtHeader
header.setAlgorithm(JwsAlgorithm.getByName(SIGNING_ALGORITHM).toString());
//set parameters to JwtClaims
claims.setClaim("response_type", "token");
claims.setClaim("client_id", serverConfiguration.getClientId());
claims.setClaim("scope", scope);
claims.setClaim("redirect_uri", AbstractOIDCAuthenticationFilter.buildRedirectURI(request, null));
claims.setClaim("nonce", NONCE_SIGNATURE_COOKIE_NAME);
if(header.getAlgorithm().equals("RS256") || header.getAlgorithm().equals("RS384") || header.getAlgorithm().equals("RS512")) {
RsaSigner jwtSigner = new RsaSigner();
try {
jwt = jwtSigner.sign(jwt);
} catch (NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} else if(header.getAlgorithm().equals("HS256") || header.getAlgorithm().equals("HS384") || header.getAlgorithm().equals("HS512")) {
HmacSigner jwtSigner = new HmacSigner();
try {
jwt = jwtSigner.sign(jwt);
} catch (NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} else {
throw new IllegalArgumentException(header.getAlgorithm() + " is not a valid signing algorithm.");
}
Map<String, String> urlVariables = new HashMap<String, String>();
urlVariables.put("request", jwt.toString());
String authRequest = AbstractOIDCAuthenticationFilter.buildURL(serverConfiguration.getAuthorizationEndpointURI(), urlVariables);
logger.debug("Auth Request: " + authRequest);
response.sendRedirect(authRequest);
}
}
public void setAuthorizationEndpointURI(String authorizationEndpointURI) { public void setAuthorizationEndpointURI(String authorizationEndpointURI) {
oidcServerConfig.setAuthorizationEndpointURI(authorizationEndpointURI); oidcServerConfig.setAuthorizationEndpointURI(authorizationEndpointURI);
@ -123,10 +172,6 @@ public class OIDCSignedRequestFilter extends AbstractOIDCAuthenticationFilter {
oidcServerConfig.setJwkSigningUrl(jwkSigningUrl); oidcServerConfig.setJwkSigningUrl(jwkSigningUrl);
} }
/**
* @param issuer
* @see org.mitre.openid.connect.config.OIDCServerConfiguration#setIssuer(java.lang.String)
*/
public void setIssuer(String issuer) { public void setIssuer(String issuer) {
oidcServerConfig.setIssuer(issuer); oidcServerConfig.setIssuer(issuer);
} }

Loading…
Cancel
Save