[java-idp-testbed] branch main updated: Add RelayState option.
Scott Cantor
cantor.2 at osu.edu
Thu Oct 2 20:17:23 UTC 2025
This is an automated email from the git hooks/post-receive script.
scantor pushed a commit to branch main
in repository java-idp-testbed.
View the commit online:
http://git.shibboleth.net/view/?p=java-idp-testbed.git;a=commit;h=f1268cfe712fcd977213929db7ff4774f3cda37f
The following commit(s) were added to refs/heads/main by this push:
new f1268cf Add RelayState option.
f1268cf is described below
commit f1268cfe712fcd977213929db7ff4774f3cda37f
Author: Scott Cantor <cantor.2 at osu.edu>
AuthorDate: Thu Oct 2 16:17:21 2025 -0400
Add RelayState option.
---
src/main/java/sp/SAML2Controller.java | 26 ++++++++++++++++++--------
src/main/webapp/index.html | 5 +++--
2 files changed, 21 insertions(+), 10 deletions(-)
diff --git a/src/main/java/sp/SAML2Controller.java b/src/main/java/sp/SAML2Controller.java
index 603cc42..8200d7c 100644
--- a/src/main/java/sp/SAML2Controller.java
+++ b/src/main/java/sp/SAML2Controller.java
@@ -38,6 +38,7 @@ import org.opensaml.messaging.encoder.servlet.AbstractHttpServletResponseMessage
import org.opensaml.saml.common.SAMLObject;
import org.opensaml.saml.common.SAMLObjectBuilder;
import org.opensaml.saml.common.SAMLVersion;
+import org.opensaml.saml.common.binding.SAMLBindingSupport;
import org.opensaml.saml.common.messaging.SAMLMessageSecuritySupport;
import org.opensaml.saml.common.messaging.context.SAMLArtifactContext;
import org.opensaml.saml.common.messaging.context.SAMLEndpointContext;
@@ -125,7 +126,7 @@ public class SAML2Controller extends BaseSAMLController {
final Endpoint endpoint = buildIdpSsoEndpoint(SAMLConstants.SAML2_REDIRECT_BINDING_URI, authnRequest.getDestination());
final String spEntityID = getSpEntityId(servletRequest);
final String idpEntityID = getIdpEntityId(servletRequest);
- final MessageContext messageContext = buildOutboundMessageContext(authnRequest, endpoint, spEntityID, idpEntityID);
+ final MessageContext messageContext = buildOutboundMessageContext(authnRequest, endpoint, spEntityID, idpEntityID, servletRequest.getParameter("RelayState"));
assert messageContext != null;
encodeOutboundMessageContextRedirect(messageContext, servletResponse);
}
@@ -137,7 +138,7 @@ public class SAML2Controller extends BaseSAMLController {
final Endpoint endpoint = buildIdpSsoEndpoint(SAMLConstants.SAML2_POST_BINDING_URI, authnRequest.getDestination());
final String spEntityID = getSpEntityId(servletRequest);
final String idpEntityID = getIdpEntityId(servletRequest);
- final MessageContext messageContext = buildOutboundMessageContext(authnRequest, endpoint, spEntityID, idpEntityID);
+ final MessageContext messageContext = buildOutboundMessageContext(authnRequest, endpoint, spEntityID, idpEntityID, servletRequest.getParameter("RelayState"));
assert messageContext != null;
SAMLMessageSecuritySupport.signMessage(messageContext);
encodeOutboundMessageContextPost(messageContext, servletResponse);
@@ -150,7 +151,7 @@ public class SAML2Controller extends BaseSAMLController {
final Endpoint endpoint = buildIdpSsoEndpoint(SAMLConstants.SAML2_ARTIFACT_BINDING_URI, authnRequest.getDestination());
final String spEntityID = getSpEntityId(servletRequest);
final String idpEntityID = getIdpEntityId(servletRequest);
- final MessageContext messageContext = buildOutboundMessageContext(authnRequest, endpoint, spEntityID, idpEntityID);
+ final MessageContext messageContext = buildOutboundMessageContext(authnRequest, endpoint, spEntityID, idpEntityID, servletRequest.getParameter("RelayState"));
assert messageContext != null;
encodeOutboundMessageContextArtifact(messageContext, servletResponse);
}
@@ -163,7 +164,7 @@ public class SAML2Controller extends BaseSAMLController {
final Endpoint endpoint = buildIdpSsoEndpoint(SAMLConstants.SAML2_REDIRECT_BINDING_URI, authnRequest.getDestination());
final String spEntityID = getSpEntityId(servletRequest);
final String idpEntityID = getIdpEntityId(servletRequest);
- final MessageContext messageContext = buildOutboundMessageContext(authnRequest, endpoint, spEntityID, idpEntityID);
+ final MessageContext messageContext = buildOutboundMessageContext(authnRequest, endpoint, spEntityID, idpEntityID, servletRequest.getParameter("RelayState"));
assert messageContext != null;
encodeOutboundMessageContextRedirect(messageContext, servletResponse);
}
@@ -176,7 +177,7 @@ public class SAML2Controller extends BaseSAMLController {
final Endpoint endpoint = buildIdpSsoEndpoint(SAMLConstants.SAML2_REDIRECT_BINDING_URI, authnRequest.getDestination());
final String spEntityID = getSpEntityId(servletRequest);
final String idpEntityID = getIdpEntityId(servletRequest);
- final MessageContext messageContext = buildOutboundMessageContext(authnRequest, endpoint, spEntityID, idpEntityID);
+ final MessageContext messageContext = buildOutboundMessageContext(authnRequest, endpoint, spEntityID, idpEntityID, servletRequest.getParameter("RelayState"));
assert messageContext != null;
encodeOutboundMessageContextRedirect(messageContext, servletResponse);
}
@@ -189,7 +190,7 @@ public class SAML2Controller extends BaseSAMLController {
final Endpoint endpoint = buildIdpSsoEndpoint(SAMLConstants.SAML2_REDIRECT_BINDING_URI, authnRequest.getDestination());
final String spEntityID = getSpEntityId(servletRequest);
final String idpEntityID = getIdpEntityId(servletRequest);
- final MessageContext messageContext = buildOutboundMessageContext(authnRequest, endpoint, spEntityID, idpEntityID);
+ final MessageContext messageContext = buildOutboundMessageContext(authnRequest, endpoint, spEntityID, idpEntityID, servletRequest.getParameter("RelayState"));
assert messageContext != null;
encodeOutboundMessageContextRedirect(messageContext, servletResponse);
}
@@ -202,7 +203,7 @@ public class SAML2Controller extends BaseSAMLController {
final Endpoint endpoint = buildIdpSsoEndpoint(SAMLConstants.SAML2_POST_BINDING_URI, authnRequest.getDestination());
final String spEntityID = getSpEntityId(servletRequest);
final String idpEntityID = getIdpEntityId(servletRequest);
- final MessageContext messageContext = buildOutboundMessageContext(authnRequest, endpoint, spEntityID, idpEntityID);
+ final MessageContext messageContext = buildOutboundMessageContext(authnRequest, endpoint, spEntityID, idpEntityID, servletRequest.getParameter("RelayState"));
assert messageContext != null;
SAMLMessageSecuritySupport.signMessage(messageContext);
encodeOutboundMessageContextPost(messageContext, servletResponse);
@@ -217,7 +218,7 @@ public class SAML2Controller extends BaseSAMLController {
final Endpoint endpoint = buildIdpSsoEndpoint(SAMLConstants.SAML2_POST_BINDING_URI, authnRequest.getDestination());
final String spEntityID = getSpEntityId(servletRequest);
final String idpEntityID = getIdpEntityId(servletRequest);
- final MessageContext messageContext = buildOutboundMessageContext(authnRequest, endpoint, spEntityID, idpEntityID);
+ final MessageContext messageContext = buildOutboundMessageContext(authnRequest, endpoint, spEntityID, idpEntityID, servletRequest.getParameter("RelayState"));
assert messageContext != null;
SAMLMessageSecuritySupport.signMessage(messageContext);
@@ -416,6 +417,11 @@ public class SAML2Controller extends BaseSAMLController {
private MessageContext buildOutboundMessageContext(final SAMLObject message, final Endpoint endpoint,
final String spEntityId, final String idpEntityId) {
+ return buildOutboundMessageContext(message, endpoint, spEntityId, idpEntityId, null);
+ }
+
+ private MessageContext buildOutboundMessageContext(final SAMLObject message, final Endpoint endpoint,
+ final String spEntityId, final String idpEntityId, final String relayState) {
final MessageContext messageContext = new MessageContext();
messageContext.setMessage(message);
@@ -430,6 +436,10 @@ public class SAML2Controller extends BaseSAMLController {
endpointContext.setEndpoint(endpoint);
}
+ if (relayState != null) {
+ SAMLBindingSupport.setRelayState(messageContext, relayState);
+ }
+
final SAMLArtifactContext artifactContext = messageContext.ensureSubcontext(SAMLArtifactContext.class);
artifactContext.setSourceArtifactResolutionServiceEndpointIndex(1);
diff --git a/src/main/webapp/index.html b/src/main/webapp/index.html
index 3bda4cf..cbc2795 100644
--- a/src/main/webapp/index.html
+++ b/src/main/webapp/index.html
@@ -1,7 +1,7 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
-<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Testbed Execution Menu</title>
</head>
<body>
@@ -25,8 +25,9 @@
<li><a href="idp/profile/Shibboleth/SSO?providerId=https://sp.example.org&shire=https://localhost/sp/SAML1/POST/ACS&target=MyRelayState">IdP-initiated (Unsolicited) SAML 1 SSO</a></li>
<li>
-<form action="sp/SAML2/InitSSO/Redirect" method="GET">
+<form action="sp/SAML2/InitSSO/Redirect" method="GET" accept-charset="UTF-8">
<p>Init SAML 2 SSO, Redirect Binding with:<br/>
+ Relay State: <input type="text" name="RelayState" size="60"/><br/>
AuthnContextClassRef: <input type="text" name="classRef" size="60"/><br/>
AuthnContextDeclRef: <input type="text" name="declRef" size="60"/><br/>
Scoping ProxyCount: <input type="text" name="proxycount" size="20"/><br/>
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.
More information about the commits
mailing list