[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