[java-idp-testbed] branch main updated: Add artifact resolution endpoint to testbed SP.
Codeberg
noreply at shibboleth.net
Mon Oct 12 17:00:44 UTC 2026
This is an automated email from the git hooks/post-receive script.
codeberg pushed a commit to branch main
in repository java-idp-testbed.
View the commit online:
https://codeberg.org/Shibboleth/java-idp-testbed/commit/7ff214e4a2bbb4ffd0a6079861585895ea8e50cd
The following commit(s) were added to refs/heads/main by this push:
new 7ff214e Add artifact resolution endpoint to testbed SP.
7ff214e is described below
commit 7ff214e4a2bbb4ffd0a6079861585895ea8e50cd
Author: Scott Cantor <scott at restingparrotsoftware.com>
AuthorDate: Mon Oct 12 13:00:01 2026 -0400
Add artifact resolution endpoint to testbed SP.
---
src/main/java/sp/SAML2Controller.java | 67 +++++++++++++++++++++++++++++++++++
1 file changed, 67 insertions(+)
diff --git a/src/main/java/sp/SAML2Controller.java b/src/main/java/sp/SAML2Controller.java
index a9bc8a6..f78a011 100644
--- a/src/main/java/sp/SAML2Controller.java
+++ b/src/main/java/sp/SAML2Controller.java
@@ -40,6 +40,7 @@ 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.binding.artifact.SAMLArtifactMap.SAMLArtifactMapEntry;
import org.opensaml.saml.common.messaging.SAMLMessageSecuritySupport;
import org.opensaml.saml.common.messaging.context.SAMLArtifactContext;
import org.opensaml.saml.common.messaging.context.SAMLEndpointContext;
@@ -55,6 +56,8 @@ import org.opensaml.saml.saml2.binding.encoding.impl.HTTPArtifactEncoder;
import org.opensaml.saml.saml2.binding.encoding.impl.HTTPPostEncoder;
import org.opensaml.saml.saml2.binding.encoding.impl.HTTPRedirectDeflateEncoder;
import org.opensaml.saml.saml2.binding.encoding.impl.HTTPSOAP11Encoder;
+import org.opensaml.saml.saml2.core.ArtifactResolve;
+import org.opensaml.saml.saml2.core.ArtifactResponse;
import org.opensaml.saml.saml2.core.AttributeQuery;
import org.opensaml.saml.saml2.core.AuthnContextClassRef;
import org.opensaml.saml.saml2.core.AuthnContextDeclRef;
@@ -419,6 +422,41 @@ public class SAML2Controller extends BaseSAMLController {
return new ResponseEntity<>(formattedMessage, headers, HttpStatus.OK);
}
+ @RequestMapping(value="/SOAP/ArtifactResolution", method=RequestMethod.POST)
+ public ResponseEntity<String> handleArtifactResolutionSOAP(final @Nonnull HttpServletRequest servletRequest,
+ final @Nonnull HttpServletResponse servletResponse) throws Exception {
+ final MessageContext messageContext = decodeInboundMessageContextSOAP(servletRequest);
+
+ if (messageContext.getMessage() instanceof ArtifactResolve artreq) {
+
+ final SAMLArtifactMapEntry entry = artifactMap.get(artreq.getArtifact().getValue());
+
+ final ArtifactResponse response = buildArtifactResponse(servletRequest, entry != null ? entry.getSamlMessage() : null);
+ response.setInResponseTo(artreq.getID());
+ final String spEntityID = getSpEntityId(servletRequest);
+ final String idpEntityID = getIdpEntityId(servletRequest);
+ final MessageContext mc = buildOutboundMessageContext(response, null, spEntityID, idpEntityID);
+ assert mc != null;
+ SAMLMessageSecuritySupport.signMessage(mc);
+ encodeOutboundMessageContextSOAP(mc, servletResponse);
+
+ return null;
+ }
+
+ final XMLObject msg = (XMLObject) messageContext.getMessage();
+ assert msg!= null;
+ final Element responseElement = msg.getDOM();
+ assert responseElement != null;
+ final String formattedMessage = SerializeSupport.prettyPrintXML(responseElement);
+
+ //TODO instead of returning plain text via a ResponseEntity, add a JSP view that looks good
+
+ final HttpHeaders headers = new HttpHeaders();
+ headers.add("Content-Type", "text/plain");
+
+ return new ResponseEntity<>(formattedMessage, headers, HttpStatus.OK);
+ }
+
private MessageContext buildOutboundMessageContext(final SAMLObject message, final Endpoint endpoint,
final String spEntityId, final String idpEntityId) {
return buildOutboundMessageContext(message, endpoint, spEntityId, idpEntityId, null);
@@ -750,6 +788,35 @@ public class SAML2Controller extends BaseSAMLController {
return logoutResponse;
}
+
+ private ArtifactResponse buildArtifactResponse(final HttpServletRequest servletRequest, final SAMLObject content) {
+ final ArtifactResponse response = (ArtifactResponse) builderFactory.ensureBuilder(
+ ArtifactResponse.DEFAULT_ELEMENT_NAME).buildObject(ArtifactResponse.DEFAULT_ELEMENT_NAME);
+
+ response.setID(idGenerator.generateIdentifier());
+ response.setIssueInstant(Instant.now());
+
+ final Issuer issuer = (Issuer) builderFactory.ensureBuilder(Issuer.DEFAULT_ELEMENT_NAME).buildObject(
+ Issuer.DEFAULT_ELEMENT_NAME);
+ issuer.setValue(getSpEntityId(servletRequest));
+ response.setIssuer(issuer);
+
+ if (content != null) {
+ response.setMessage(content);
+ }
+
+ final Status status = (Status) builderFactory.ensureBuilder(Status.DEFAULT_ELEMENT_NAME).buildObject(
+ Status.DEFAULT_ELEMENT_NAME);
+ response.setStatus(status);
+
+ final StatusCode code = (StatusCode) builderFactory.ensureBuilder(StatusCode.DEFAULT_ELEMENT_NAME).buildObject(
+ StatusCode.DEFAULT_ELEMENT_NAME);
+ status.setStatusCode(code);
+
+ code.setValue(StatusCode.SUCCESS);
+
+ return response;
+ }
@Nonnull private String getDestinationRedirect(final @Nonnull HttpServletRequest servletRequest, final @Nonnull String profile) {
//TODO servlet context
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.
More information about the commits
mailing list