added service to optionally check "target_uri" links, closes #547
parent
e4d5f4a540
commit
27e68f1d56
|
@ -110,8 +110,9 @@ public class OIDCAuthenticationFilter extends AbstractAuthenticationProcessingFi
|
||||||
private AuthRequestOptionsService authOptions = new StaticAuthRequestOptionsService(); // initialize with an empty set of options
|
private AuthRequestOptionsService authOptions = new StaticAuthRequestOptionsService(); // initialize with an empty set of options
|
||||||
private AuthRequestUrlBuilder authRequestBuilder;
|
private AuthRequestUrlBuilder authRequestBuilder;
|
||||||
|
|
||||||
// private helper to handle target link URLs
|
// private helpers to handle target link URLs
|
||||||
private TargetLinkURIAuthenticationSuccessHandler targetSuccessHandler = new TargetLinkURIAuthenticationSuccessHandler();
|
private TargetLinkURIAuthenticationSuccessHandler targetSuccessHandler = new TargetLinkURIAuthenticationSuccessHandler();
|
||||||
|
private TargetLinkURIChecker deepLinkFilter;
|
||||||
|
|
||||||
protected int httpSocketTimeout = HTTP_SOCKET_TIMEOUT;
|
protected int httpSocketTimeout = HTTP_SOCKET_TIMEOUT;
|
||||||
|
|
||||||
|
@ -641,8 +642,10 @@ public class OIDCAuthenticationFilter extends AbstractAuthenticationProcessingFi
|
||||||
String target = getStoredSessionString(session, TARGET_SESSION_VARIABLE);
|
String target = getStoredSessionString(session, TARGET_SESSION_VARIABLE);
|
||||||
|
|
||||||
if (!Strings.isNullOrEmpty(target)) {
|
if (!Strings.isNullOrEmpty(target)) {
|
||||||
// TODO (#547): should we (can we?) check to see if this URL is part of our app's namespace?
|
|
||||||
session.removeAttribute(TARGET_SESSION_VARIABLE);
|
session.removeAttribute(TARGET_SESSION_VARIABLE);
|
||||||
|
|
||||||
|
target = deepLinkFilter.filter(target);
|
||||||
|
|
||||||
response.sendRedirect(target);
|
response.sendRedirect(target);
|
||||||
} else {
|
} else {
|
||||||
// if the target was blank, use the default behavior here
|
// if the target was blank, use the default behavior here
|
||||||
|
@ -751,4 +754,29 @@ public class OIDCAuthenticationFilter extends AbstractAuthenticationProcessingFi
|
||||||
this.authOptions = authOptions;
|
this.authOptions = authOptions;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public SymmetricCacheService getSymmetricCacheService() {
|
||||||
|
return symmetricCacheService;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSymmetricCacheService(SymmetricCacheService symmetricCacheService) {
|
||||||
|
this.symmetricCacheService = symmetricCacheService;
|
||||||
|
}
|
||||||
|
|
||||||
|
public TargetLinkURIAuthenticationSuccessHandler getTargetLinkURIAuthenticationSuccessHandler() {
|
||||||
|
return targetSuccessHandler;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTargetLinkURIAuthenticationSuccessHandler(
|
||||||
|
TargetLinkURIAuthenticationSuccessHandler targetSuccessHandler) {
|
||||||
|
this.targetSuccessHandler = targetSuccessHandler;
|
||||||
|
}
|
||||||
|
|
||||||
|
public TargetLinkURIChecker targetLinkURIChecker() {
|
||||||
|
return deepLinkFilter;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTargetLinkURIChecker(TargetLinkURIChecker deepLinkFilter) {
|
||||||
|
this.deepLinkFilter = deepLinkFilter;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,33 @@
|
||||||
|
package org.mitre.openid.connect.client;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Simple target URI checker, checks whether the string in question starts
|
||||||
|
* with a configured prefix. Returns "/" if the match fails.
|
||||||
|
*
|
||||||
|
* @author jricher
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class StaticPrefixTargetLinkURIChecker implements TargetLinkURIChecker {
|
||||||
|
|
||||||
|
private String prefix = "";
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String filter(String target) {
|
||||||
|
if (target == null) {
|
||||||
|
return "/";
|
||||||
|
} else if (target.startsWith(prefix)) {
|
||||||
|
return target;
|
||||||
|
} else {
|
||||||
|
return "/";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getPrefix() {
|
||||||
|
return prefix;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPrefix(String prefix) {
|
||||||
|
this.prefix = prefix;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,13 @@
|
||||||
|
package org.mitre.openid.connect.client;
|
||||||
|
|
||||||
|
public interface TargetLinkURIChecker {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check the parameter to make sure that it's a valid deep-link into this application.
|
||||||
|
*
|
||||||
|
* @param target
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public String filter(String target);
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue