diff options
author | Thomas Lenz <tlenz@iaik.tugraz.at> | 2013-09-06 11:59:19 +0200 |
---|---|---|
committer | Thomas Lenz <tlenz@iaik.tugraz.at> | 2013-09-06 11:59:19 +0200 |
commit | 642ec4805453c5a85fc53f8bf9a7b6f886f03cb1 (patch) | |
tree | 00cba581f98887bdd2eff0d1a52089cab7670293 | |
parent | 011ce9576c780cba8a0f7b321366e08b557adcf6 (diff) | |
download | moa-id-spss-642ec4805453c5a85fc53f8bf9a7b6f886f03cb1.tar.gz moa-id-spss-642ec4805453c5a85fc53f8bf9a7b6f886f03cb1.tar.bz2 moa-id-spss-642ec4805453c5a85fc53f8bf9a7b6f886f03cb1.zip |
MOA-ID Proxy updated to Version 2.0
insert "errorRedirectURL" parameter to proxy configuration
if an error occurs, the user is redirected to this error page
16 files changed, 197 insertions, 74 deletions
diff --git a/common/src/main/resources/resources/schemas/MOA-ID-Configuration-1.5.2.xsd b/common/src/main/resources/resources/schemas/MOA-ID-Configuration-1.5.2.xsd index 147066241..ed0c83fc3 100644 --- a/common/src/main/resources/resources/schemas/MOA-ID-Configuration-1.5.2.xsd +++ b/common/src/main/resources/resources/schemas/MOA-ID-Configuration-1.5.2.xsd @@ -510,6 +510,7 @@ <xsd:attribute name="loginParameterResolverImpl" type="xsd:string" use="optional"/>
<xsd:attribute name="loginParameterResolverConfiguration" type="xsd:string" use="optional"/>
<xsd:attribute name="connectionBuilderImpl" type="xsd:string" use="optional"/>
+ <xsd:attribute name="errorRedirectURL" type="xsd:string" use="optional"/>
</xsd:complexType>
</xsd:element>
<!--xsd:element ref="pr:CorporateBody" minOccurs="0" maxOccurs="1"/-->
diff --git a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/config/ConnectionParameter.java b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/config/ConnectionParameter.java index b358a31c9..edde15ea0 100644 --- a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/config/ConnectionParameter.java +++ b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/config/ConnectionParameter.java @@ -4,7 +4,7 @@ import java.util.Properties; import at.gv.egovernment.moa.id.commons.db.dao.config.ConnectionParameterClientAuthType; -public abstract class ConnectionParameter { +public abstract class ConnectionParameter implements ConnectionParameterInterface{ protected static final String PROP_IDENTIFIER_KEYSTORE = "clientKeyStore"; protected static final String PROP_IDENTIFIER_KEYSTOREPASSWORD = "clientKeyStorePassword"; diff --git a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/config/auth/AuthConfigLoader.java b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/config/auth/AuthConfigLoader.java index 56105e64d..4f4ddeb6c 100644 --- a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/config/auth/AuthConfigLoader.java +++ b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/config/auth/AuthConfigLoader.java @@ -29,7 +29,7 @@ public class AuthConfigLoader implements Runnable { instance.reloadDataBaseConfig(); date = dbdate; } - } catch (Exception e) { + } catch (Throwable e) { Logger.warn("MOA-ID Configuration is actually not loadable. Reuse old configuration.", e); } } diff --git a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/config/legacy/ConnectionParameter.java b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/config/legacy/ConnectionParameter.java index 455fde9bf..c7299975e 100644 --- a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/config/legacy/ConnectionParameter.java +++ b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/config/legacy/ConnectionParameter.java @@ -24,6 +24,8 @@ package at.gv.egovernment.moa.id.config.legacy; +import at.gv.egovernment.moa.id.config.ConnectionParameterInterface; + /** * This bean class is used to store data for various connectionParameter * within the MOA-ID configuration @@ -31,7 +33,7 @@ package at.gv.egovernment.moa.id.config.legacy; * @author Stefan Knirsch * @version $Id$ */ -public class ConnectionParameter { +public class ConnectionParameter implements ConnectionParameterInterface{ /** * Server URL diff --git a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/config/proxy/OAProxyParameter.java b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/config/proxy/OAProxyParameter.java index d14d570ab..6f7434cbc 100644 --- a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/config/proxy/OAProxyParameter.java +++ b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/config/proxy/OAProxyParameter.java @@ -76,6 +76,8 @@ public class OAProxyParameter extends OAParameter { */ private OAConfiguration oaConfiguration; + private String errorRedirctURL; + /** * Returns the configFileURL. @@ -205,4 +207,20 @@ public class OAProxyParameter extends OAParameter { this.oaConfiguration = oaConfiguration; } +/** + * @return the errorRedirctURL + */ +public String getErrorRedirctURL() { + return errorRedirctURL; +} + +/** + * @param errorRedirctURL the errorRedirctURL to set + */ +public void setErrorRedirctURL(String errorRedirctURL) { + this.errorRedirctURL = errorRedirctURL; +} + + + } diff --git a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/config/proxy/ProxyConfigurationBuilder.java b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/config/proxy/ProxyConfigurationBuilder.java index 094e7162e..d495846b6 100644 --- a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/config/proxy/ProxyConfigurationBuilder.java +++ b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/config/proxy/ProxyConfigurationBuilder.java @@ -69,8 +69,10 @@ public class ProxyConfigurationBuilder extends ConfigurationBuilder { private static final String OA_PROXY_LOGIN_PARA_XPATH = CONF + "ProxyComponent/@loginParameterResolverImpl"; /** an XPATH-Expression */ private static final String OA_PROXY_LOGIN_PARA_CONF_XPATH = CONF + "ProxyComponent/@loginParameterResolverConfiguration"; - /** an XPATH-Expression */ + private static final String OA_PROXY_CONNECTION_BUILDER_XPATH = CONF + "ProxyComponent/@connectionBuilderImpl"; + /** an XPATH-Expression */ + private static final String OA_PROXY_ERROR_REDIRECT_URL_XPATH = CONF + "ProxyComponent/@errorRedirectURL"; /** an XPATH-Expression */ protected static final String OACONF_LOGIN_TYPE_XPATH = ROOTOA + CONF + "LoginType"; @@ -201,7 +203,8 @@ public class ProxyConfigurationBuilder extends ConfigurationBuilder { oap.setLoginParameterResolverConfiguration(XPathUtils.getAttributeValue(oAElem, OA_PROXY_LOGIN_PARA_CONF_XPATH, null)); oap.setLoginParameterResolverConfiguration(FileUtils.makeAbsoluteURL(oap.getLoginParameterResolverConfiguration(), rootConfigFileDir_)); oap.setConnectionBuilderImpl(XPathUtils.getAttributeValue(oAElem,OA_PROXY_CONNECTION_BUILDER_XPATH, null)); - + oap.setErrorRedirctURL(XPathUtils.getAttributeValue(oAElem,OA_PROXY_ERROR_REDIRECT_URL_XPATH, null)); + ConnectionParameter conPara = buildConnectionParameter(proxyComponentElem); oap.setConnectionParameter(conPara); diff --git a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/config/proxy/ProxyConfigurationProvider.java b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/config/proxy/ProxyConfigurationProvider.java index 1c9c1caa8..ac9a3ed3f 100644 --- a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/config/proxy/ProxyConfigurationProvider.java +++ b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/config/proxy/ProxyConfigurationProvider.java @@ -173,6 +173,32 @@ public class ProxyConfigurationProvider extends ConfigurationProvider { } } + public String getTrustedCACertificates() { + + return trustedCACertificates; + } + + /** + * @return the certstoreDirectory + */ + public String getCertstoreDirectory() { + if (genericConfiguration.containsKey(ConfigurationProvider.DIRECTORY_CERTSTORE_PARAMETER_PROPERTY)) + return (String)genericConfiguration.get(ConfigurationProvider.DIRECTORY_CERTSTORE_PARAMETER_PROPERTY); + else + return null; + } + + /** + * @return the trustmanagerrevoationchecking + */ + public boolean isTrustmanagerrevoationchecking() { + if (genericConfiguration.containsKey(ConfigurationProvider.TRUST_MANAGER_REVOCATION_CHECKING)) + return Boolean.valueOf((String)genericConfiguration.get(ConfigurationProvider.TRUST_MANAGER_REVOCATION_CHECKING)); + else + return true; + } + + /** * Return a bean containing all information about the ProxyComponent * @return The ConnectionParameter for the Proxy Component diff --git a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/data/AuthenticationData.java b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/data/AuthenticationData.java index 4bbd221a5..e18981032 100644 --- a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/data/AuthenticationData.java +++ b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/data/AuthenticationData.java @@ -130,6 +130,15 @@ public class AuthenticationData implements Serializable { */ Date timestamp; + + + //this method is only required for MOA-ID Proxy 2.0 Release. + //TODO: remove it, if MOA-ID Proxy is not supported anymore. + public String getWBPK() { + return bPK; + } + + /** * Constructor for AuthenticationData. */ @@ -176,15 +185,7 @@ public class AuthenticationData implements Serializable { public String getBPK() { return bPK; } - -// /** -// * Returns the wbPK. -// * @return String the wbPK. -// */ -// public String getWBPK() { -// return wbPK; -// } - + /** * Returns useUTC * @return useUTC diff --git a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/proxy/LoginParameterResolverFactory.java b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/proxy/LoginParameterResolverFactory.java index bb6b0a476..be8768845 100644 --- a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/proxy/LoginParameterResolverFactory.java +++ b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/proxy/LoginParameterResolverFactory.java @@ -69,7 +69,7 @@ public class LoginParameterResolverFactory { if (className != null) { try { Class lprClass = Class.forName(className); - LoginParameterResolver lpr = (LoginParameterResolver)Class.forName(className).newInstance(); + LoginParameterResolver lpr = (LoginParameterResolver)Class.forName(className).newInstance(); Class[] argumentTypes = { String.class, Boolean.class }; Method confMethod = lprClass.getMethod( "configure", argumentTypes ); diff --git a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/proxy/MOAIDProxyInitializer.java b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/proxy/MOAIDProxyInitializer.java index e075c99ef..df19956e7 100644 --- a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/proxy/MOAIDProxyInitializer.java +++ b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/proxy/MOAIDProxyInitializer.java @@ -91,10 +91,8 @@ public class MOAIDProxyInitializer { ConnectionParameter connParamAuth = proxyConf.getAuthComponentConnectionParameter(); if (connParamAuth!=null) { if (connParamAuth.isHTTPSURL()) { - - //TODO: einkommentieren!!!! - //SSLSocketFactory ssf = SSLUtils.getSSLSocketFactory(proxyConf, connParamAuth); - //AxisSecureSocketFactory.initialize(ssf); + SSLSocketFactory ssf = SSLUtils.getSSLSocketFactory(proxyConf, connParamAuth); + AxisSecureSocketFactory.initialize(ssf); } } else { throw new ConfigurationException("config.16", null); @@ -107,9 +105,7 @@ public class MOAIDProxyInitializer { OAProxyParameter oaParam = oaParams[i]; ConnectionParameter oaConnParam = oaParam.getConnectionParameter(); if (oaConnParam.isHTTPSURL()); - - //TODO: einkommentieren!!!! - //SSLUtils.getSSLSocketFactory(proxyConf, oaConnParam); + SSLUtils.getSSLSocketFactory(proxyConf, oaConnParam); } // Initializes the ConnectionBuilderFactory from configuration data diff --git a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/proxy/invoke/GetAuthenticationDataInvoker.java b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/proxy/invoke/GetAuthenticationDataInvoker.java index 6cb7ffdfc..e87d9d1c0 100644 --- a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/proxy/invoke/GetAuthenticationDataInvoker.java +++ b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/proxy/invoke/GetAuthenticationDataInvoker.java @@ -38,6 +38,7 @@ import org.w3c.dom.Element; import at.gv.egovernment.moa.id.AuthenticationException; import at.gv.egovernment.moa.id.BuildException; +import at.gv.egovernment.moa.id.MOAIDException; import at.gv.egovernment.moa.id.ParseException; import at.gv.egovernment.moa.id.ServiceException; import at.gv.egovernment.moa.id.config.ConfigurationException; @@ -49,6 +50,7 @@ import at.gv.egovernment.moa.id.proxy.builder.SAMLRequestBuilder; import at.gv.egovernment.moa.id.proxy.parser.SAMLResponseParser; import at.gv.egovernment.moa.id.proxy.servlet.ProxyException; import at.gv.egovernment.moa.id.util.Random; +import at.gv.egovernment.moa.logging.Logger; /** * Invoker of @@ -81,49 +83,63 @@ public class GetAuthenticationDataInvoker { * either via API call or via web service call. * @param samlArtifact SAML artifact to be used as a parameter * @return AuthenticationData + * @throws MOAIDException */ public AuthenticationData getAuthenticationData(String samlArtifact) - throws ConfigurationException, ProxyException, BuildException, ServiceException, ParseException, AuthenticationException { + throws MOAIDException { ConnectionParameter authConnParam = ProxyConfigurationProvider.getInstance().getAuthComponentConnectionParameter(); - if (authConnParam == null) { - try { - if (apiServer == null) { - Class serverClass = Class.forName("at.gv.egovernment.moa.id.auth.AuthenticationServer"); - Method getInstanceMethod = serverClass.getMethod("getInstance", (Class[]) null); - apiServer = getInstanceMethod.invoke(null, (Object[]) null); - apiMethod = serverClass.getMethod( - "getAuthenticationData", new Class[] {String.class}); - } - AuthenticationData authData = (AuthenticationData)apiMethod.invoke(apiServer, new Object[] {samlArtifact}); - return authData; - } - catch (InvocationTargetException ex) { - Throwable targetEx = ex.getTargetException(); - if (targetEx instanceof AuthenticationException) - throw (AuthenticationException) targetEx; - else - throw new ProxyException("proxy.09", new Object[] {targetEx.toString()}); - } - catch (Throwable ex) { - throw new ProxyException("proxy.09", new Object[] {ex.toString()}); - } - } - else { + + //Removed for MOA-ID 2.x +// if (authConnParam == null) { +// try { +// if (apiServer == null) { +// Class serverClass = Class.forName("at.gv.egovernment.moa.id.auth.AuthenticationServer"); +// Method getInstanceMethod = serverClass.getMethod("getInstance", (Class[]) null); +// apiServer = getInstanceMethod.invoke(null, (Object[]) null); +// apiMethod = serverClass.getMethod( +// "getAuthenticationData", new Class[] {String.class}); +// } +// AuthenticationData authData = (AuthenticationData)apiMethod.invoke(apiServer, new Object[] {samlArtifact}); +// return authData; +// } +// catch (InvocationTargetException ex) { +// Throwable targetEx = ex.getTargetException(); +// if (targetEx instanceof AuthenticationException) +// throw (AuthenticationException) targetEx; +// else +// throw new ProxyException("proxy.09", new Object[] {targetEx.toString()}); +// } +// catch (Throwable ex) { +// throw new ProxyException("proxy.09", new Object[] {ex.toString()}); +// } +// } +// else { Element samlpRequest = new SAMLRequestBuilder().build(Random.nextRandom(), samlArtifact); Element samlpResponse = getAuthenticationData(samlpRequest); SAMLResponseParser srp = new SAMLResponseParser(samlpResponse); SAMLStatus status = srp.parseStatusCode(); if (! "samlp:Success".equals(status.getStatusCode())) { - // on error status throw exception - String code = status.getStatusCode(); - if (status.getSubStatusCode() != null && status.getSubStatusCode().length() > 0) - code += "(" + status.getSubStatusCode() + ")"; - throw new ServiceException("service.02", new Object[] {code, status.getStatusMessage()}); + if ("samlp:Responder".equals(status.getStatusCode())) { + Logger.info("MOA-ID authentication process failed."); + String code = status.getStatusCode(); + if (status.getSubStatusCode() != null && status.getSubStatusCode().length() > 0) + code += "(" + status.getSubStatusCode() + ")"; + + throw new MOAIDException("proxy.17", new Object[] {status.getStatusMessage()}); + + } else { + // on error status throw exception + String code = status.getStatusCode(); + if (status.getSubStatusCode() != null && status.getSubStatusCode().length() > 0) + code += "(" + status.getSubStatusCode() + ")"; + + throw new ServiceException("service.02", new Object[] {code, status.getStatusMessage()}); + } } return srp.parseAuthenticationData(); - } +// } } /** diff --git a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/proxy/parser/AuthenticationDataAssertionParser.java b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/proxy/parser/AuthenticationDataAssertionParser.java index 1589f1440..0f3f4b692 100644 --- a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/proxy/parser/AuthenticationDataAssertionParser.java +++ b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/proxy/parser/AuthenticationDataAssertionParser.java @@ -144,11 +144,10 @@ public class AuthenticationDataAssertionParser implements Constants { XPathUtils.getAttributeValue(samlAssertion, ISSUE_INSTANT_XPATH, "")); String pkValue = XPathUtils.getElementValue(samlAssertion, PK_XPATH, ""); - - //TODO: set pBK and Type if (XPathUtils.getAttributeValue(samlAssertion, NAME_QUALIFIER_XPATH, "").equalsIgnoreCase(URN_PREFIX_BPK)) { //bPK - authData.setBPK(Constants.URN_PREFIX_BPK); + authData.setBPK(pkValue); + authData.setBPKType(Constants.URN_PREFIX_BPK); } else { //wbPK diff --git a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/proxy/servlet/ProxyServlet.java b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/proxy/servlet/ProxyServlet.java index ddaab7a28..f3f6c55c1 100644 --- a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/proxy/servlet/ProxyServlet.java +++ b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/proxy/servlet/ProxyServlet.java @@ -30,6 +30,7 @@ import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.StringWriter; +import java.io.UnsupportedEncodingException; import java.net.HttpURLConnection; import java.util.Enumeration; import java.util.HashMap; @@ -54,6 +55,7 @@ import at.gv.egovernment.moa.id.BuildException; import at.gv.egovernment.moa.id.MOAIDException; import at.gv.egovernment.moa.id.ParseException; import at.gv.egovernment.moa.id.ServiceException; +import at.gv.egovernment.moa.id.auth.servlet.RedirectServlet; import at.gv.egovernment.moa.id.config.ConfigurationException; import at.gv.egovernment.moa.id.config.legacy.ConnectionParameter; import at.gv.egovernment.moa.id.config.proxy.OAConfiguration; @@ -72,6 +74,8 @@ import at.gv.egovernment.moa.id.util.MOAIDMessageProvider; import at.gv.egovernment.moa.id.util.SSLUtils; import at.gv.egovernment.moa.logging.Logger; import at.gv.egovernment.moa.util.Base64Utils; +import at.gv.egovernment.moa.util.MiscUtil; +import at.gv.egovernment.moa.util.URLEncoder; /** * Servlet requested for logging in at an online application, @@ -88,6 +92,8 @@ public class ProxyServlet extends HttpServlet { private static final String PARAM_TARGET = "Target"; /** Name of the Parameter for the SAMLArtifact */ private static final String PARAM_SAMLARTIFACT = "SAMLArtifact"; + /** Name of the Parameter for the ErrorMessage */ + private static final String PARAM_ERRORMASSAGE = "error"; /** Name of the Attribute for marking the session as authenticated*/ private static final String ATT_AUTHDATAFETCHED = "AuthDataFetched"; @@ -191,6 +197,13 @@ public class ProxyServlet extends HttpServlet { if (session.getAttribute(ATT_BROWSERREQU)==null) { + // read configuration data + ProxyConfigurationProvider proxyConf = ProxyConfigurationProvider.getInstance(); + OAProxyParameter oaParam = proxyConf.getOnlineApplicationParameter(urlRequested); + if (oaParam == null) { + throw new ProxyException("proxy.02", new Object[] { urlRequested }); + } + samlArtifact = req.getParameter(PARAM_SAMLARTIFACT); Logger.debug("moa-id-proxy login " + PARAM_SAMLARTIFACT + ": " + samlArtifact); // String target = req.getParameter(PARAM_TARGET); parameter given but not processed @@ -200,19 +213,26 @@ public class ProxyServlet extends HttpServlet { AuthenticationData authData; try { authData = new GetAuthenticationDataInvoker().getAuthenticationData(samlArtifact); + } catch (ServiceException ex) { - throw new ProxyException("proxy.14", new Object[] {ex.getMessage()}, ex); + throw new ProxyException("proxy.14", new Object[] {ex.getMessage()}, ex); + } catch (ProxyException ex) { throw new ProxyException("proxy.14", new Object[] {ex.getMessage()}, ex); - } + + } catch (MOAIDException ex) { + String errorURL = oaParam.getErrorRedirctURL(); + if (MiscUtil.isNotEmpty(errorURL)) { + generateErrorAndRedirct(resp, errorURL, ex.getMessage()); + return; + + } else { + Logger.info("No ErrorRedirectURL defined. The error is shown on MOA-ID Proxy errorpage."); + throw new ProxyException("proxy.14", new Object[] {ex.getMessage()}, ex); + } + } session.setAttribute(ATT_AUTHDATAFETCHED, "true"); - - // read configuration data - ProxyConfigurationProvider proxyConf = ProxyConfigurationProvider.getInstance(); - OAProxyParameter oaParam = proxyConf.getOnlineApplicationParameter(urlRequested); - if (oaParam == null) { - throw new ProxyException("proxy.02", new Object[] { urlRequested }); - } + publicURLPrefix = oaParam.getPublicURLPrefix(); Logger.debug("OA: " + publicURLPrefix); oaConf = oaParam.getOaConfiguration(); @@ -257,17 +277,32 @@ public class ProxyServlet extends HttpServlet { loginHeaders.remove("param3"); } } catch (LoginParameterResolverException ex) { - throw new ProxyException("proxy.13", new Object[] { publicURLPrefix }); + String errorURL = oaParam.getErrorRedirctURL(); + if (MiscUtil.isNotEmpty(errorURL)) { + generateErrorAndRedirct(resp, errorURL, + MOAIDMessageProvider.getInstance().getMessage("proxy.13", + new Object[] { publicURLPrefix })); + return; + + } else + throw new ProxyException("proxy.13", new Object[] { publicURLPrefix }); + } catch (NotAllowedException e) { - throw new ProxyException("proxy.15", new Object[] { }); + String errorURL = oaParam.getErrorRedirctURL(); + if (MiscUtil.isNotEmpty(errorURL)) { + generateErrorAndRedirct(resp, errorURL, + MOAIDMessageProvider.getInstance().getMessage("proxy.15", + new Object[] { })); + return; + + } else + throw new ProxyException("proxy.15", new Object[] { }); } // setup SSLSocketFactory for communication with the online application if (oaConnParam.isHTTPSURL()) { - try { - - //TODO: einkommentieren!!!! - //ssf = SSLUtils.getSSLSocketFactory(proxyConf, oaConnParam); + try { + ssf = SSLUtils.getSSLSocketFactory(proxyConf, oaConnParam); } catch (Throwable ex) { throw new ProxyException( "proxy.05", @@ -923,5 +958,28 @@ private static void copyStream(InputStream source, OutputStream destination, byt } } +private static void generateErrorAndRedirct(HttpServletResponse resp, String errorURL, String message) { + try { + errorURL = addURLParameter(errorURL, PARAM_ERRORMASSAGE, + URLEncoder.encode(message, "UTF-8")); + + } catch (UnsupportedEncodingException e) { + errorURL = addURLParameter(errorURL, PARAM_ERRORMASSAGE, "Fehlermeldung%20konnte%20nicht%20%C3%BCbertragen%20werden."); + } + + errorURL = resp.encodeRedirectURL(errorURL); + resp.setContentType("text/html"); + resp.setStatus(302); + resp.addHeader("Location", errorURL); +} + +protected static String addURLParameter(String url, String paramname, + String paramvalue) { + String param = paramname + "=" + paramvalue; + if (url.indexOf("?") < 0) + return url + "?" + param; + else + return url + "&" + param; +} } diff --git a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/util/SSLUtils.java b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/util/SSLUtils.java index a6619fc11..0130046de 100644 --- a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/util/SSLUtils.java +++ b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/util/SSLUtils.java @@ -55,6 +55,7 @@ import org.apache.regexp.RESyntaxException; import at.gv.egovernment.moa.id.config.ConfigurationException; import at.gv.egovernment.moa.id.config.ConfigurationProvider; import at.gv.egovernment.moa.id.config.ConnectionParameter; +import at.gv.egovernment.moa.id.config.ConnectionParameterInterface; import at.gv.egovernment.moa.id.iaik.config.PKIConfigurationImpl; import at.gv.egovernment.moa.id.iaik.pki.PKIProfileImpl; import at.gv.egovernment.moa.id.iaik.pki.jsse.MOAIDTrustManager; @@ -106,7 +107,7 @@ public class SSLUtils { */ public static SSLSocketFactory getSSLSocketFactory( ConfigurationProvider conf, - ConnectionParameter connParam) + ConnectionParameterInterface connParam) throws IOException, GeneralSecurityException, ConfigurationException, PKIException { Logger.debug("Get SSLSocketFactory for " + connParam.getUrl()); diff --git a/id/server/idserverlib/src/main/resources/resources/properties/id_messages_de.properties b/id/server/idserverlib/src/main/resources/resources/properties/id_messages_de.properties index 41c3cf6fe..9b945952d 100644 --- a/id/server/idserverlib/src/main/resources/resources/properties/id_messages_de.properties +++ b/id/server/idserverlib/src/main/resources/resources/properties/id_messages_de.properties @@ -108,8 +108,9 @@ proxy.11=Beim Weiterleiten der Verbindung zur Anwendung ist ein Fehler aufgetret proxy.12=Fehler bei der Anmeldung. <br>Eine Anmeldung an der Anwendung <b>{0}</b> war nicht möglich. <br>Prüfen Sie bitte ihre Berechtigung.
proxy.13=Fehler beim Aufruf des LoginParameterResolvers zu URL-Pr\uFFFDfix\: {0}
proxy.14=<p> Folgende Ursachen k\u00F6nnen zu dem Fehler gef\u00FChrt haben\:</p><ol><li>Sie sind nicht mehr angemeldet (Verbindungen werden aus Sicherheitsgr\u00FCnden bei l\u00E4ngerer Inaktivit\u00E4t beendet.)<br>Melden Sie sich bitte erneut an.</li><li> Die Kommunikation mit dem Server schlug fehl.<br> </li></ol>
-proxy.15=Auf die gew\u00FCnschte Seite kann nicht zugegriffen werden, Sie besitzen nicht die ben?tigte Berechtigung.
+proxy.15=Auf die gew\u00FCnschte Seite kann nicht zugegriffen werden, Sie besitzen nicht die benötigte Berechtigung.
proxy.16=Fehler bei der Anmeldung. <br>Eine Anmeldung an der Anwendung <b>{0}</b> war nicht möglich. Die maximale Anzahl von {1} ungültigen Loginversuchen wurde überschritten.<br>Prüfen Sie bitte ihre Berechtigung.
+proxy.17=Bei der Anmeldung an MOA-ID ist ein Fehler aufgetreten: {0}
validator.00=Kein SAML:Assertion Objekt gefunden {0}
validator.01=Im Subject kommt mehr als ein Element des Typs PhysicalPersonType vor {0}
diff --git a/id/server/proxy/pom.xml b/id/server/proxy/pom.xml index ca91c6139..3cf7a3316 100644 --- a/id/server/proxy/pom.xml +++ b/id/server/proxy/pom.xml @@ -13,7 +13,7 @@ <groupId>MOA.id.server</groupId>
<artifactId>moa-id-proxy</artifactId>
<packaging>war</packaging>
- <version>1.5.2</version>
+ <version>1.9.90-SNAPSHOT</version>
<name>MOA ID-Proxy WebService</name>
<build>
@@ -63,6 +63,7 @@ <dependency>
<groupId>MOA.id.server</groupId>
<artifactId>moa-id-lib</artifactId>
+ <version>1.9.90-SNAPSHOT</version>
<!--version>${project.version}</version-->
</dependency>
<!-- transitive dependencies we don't want to include into the war -->
|