[java-idp-testbed COMMIT] in /trunk/src/main: java/sp/SAML2Controller.java webapp/index.html
noreply at shibboleth.net
noreply at shibboleth.net
Tue Sep 9 13:47:40 EDT 2014
Author: scantor
Date: Tue Sep 9 13:47:39 2014
New Revision: 283
URL: http://svn.shibboleth.net/view/java-idp-testbed?rev=283&view=rev
Log:
IDP-224 - Add trivial processing of SAML logout responses.
Modified:
trunk/src/main/java/sp/SAML2Controller.java
trunk/src/main/webapp/index.html
Modified: trunk/src/main/java/sp/SAML2Controller.java
URL: http://svn.shibboleth.net/view/java-idp-testbed/trunk/src/main/java/sp/SAML2Controller.java?rev=283&r1=282&r2=283&view=diff
==============================================================================
--- trunk/src/main/java/sp/SAML2Controller.java (original)
+++ trunk/src/main/java/sp/SAML2Controller.java Tue Sep 9 13:47:39 2014
@@ -28,8 +28,9 @@
import org.opensaml.saml.saml2.core.LogoutResponse;
import org.opensaml.saml.saml2.core.NameID;
import org.opensaml.saml.saml2.core.NameIDPolicy;
-import org.opensaml.saml.saml2.core.RequestAbstractType;
import org.opensaml.saml.saml2.core.Response;
+import org.opensaml.saml.saml2.core.Status;
+import org.opensaml.saml.saml2.core.StatusCode;
import org.opensaml.saml.saml2.metadata.Endpoint;
import org.opensaml.saml.saml2.metadata.SingleLogoutService;
import org.opensaml.saml.saml2.metadata.SingleSignOnService;
@@ -126,6 +127,25 @@
encodeOutboundMessageContextPost(messageContext, servletResponse);
}
+ @RequestMapping(value="/FinishSLO/Redirect", method=RequestMethod.GET)
+ public void finishSLOResponseRedirect(HttpServletRequest servletRequest, HttpServletResponse servletResponse) throws Exception {
+ LogoutResponse logoutResponse = buildLogoutResponse(servletRequest);
+ logoutResponse.setDestination(getDestinationRedirect(servletRequest, "SLO"));
+ MessageContext<SAMLObject> messageContext = buildOutboundMessageContext(logoutResponse,
+ buildIdpSloEndpoint(SAMLConstants.SAML2_REDIRECT_BINDING_URI, logoutResponse.getDestination()));
+ encodeOutboundMessageContextRedirect(messageContext, servletResponse);
+ }
+
+ @RequestMapping(value="/FinishSLO/POST", method=RequestMethod.GET)
+ public void finishSLOResponsePost(HttpServletRequest servletRequest, HttpServletResponse servletResponse) throws Exception {
+ LogoutResponse logoutResponse = buildLogoutResponse(servletRequest);
+ logoutResponse.setDestination(getDestinationPost(servletRequest, "SLO"));
+ MessageContext<SAMLObject> messageContext = buildOutboundMessageContext(logoutResponse,
+ buildIdpSloEndpoint(SAMLConstants.SAML2_POST_BINDING_URI, logoutResponse.getDestination()));
+ SAMLMessageSecuritySupport.signMessage(messageContext);
+ encodeOutboundMessageContextPost(messageContext, servletResponse);
+ }
+
@RequestMapping(value="/POST/ACS", method=RequestMethod.POST)
public ResponseEntity<String> handleSSOResponsePOST(HttpServletRequest servletRequest, HttpServletResponse servletResponse) throws Exception {
final MessageContext<SAMLObject> messageContext = decodeInboundMessageContextPost(servletRequest);
@@ -189,9 +209,9 @@
return new ResponseEntity<String>(formattedMessage, headers, HttpStatus.OK);
}
- private MessageContext<SAMLObject> buildOutboundMessageContext(RequestAbstractType request, Endpoint endpoint) {
+ private MessageContext<SAMLObject> buildOutboundMessageContext(SAMLObject message, Endpoint endpoint) {
MessageContext<SAMLObject> messageContext = new MessageContext<>();
- messageContext.setMessage(request);
+ messageContext.setMessage(message);
SAMLPeerEntityContext peerContext = messageContext.getSubcontext(SAMLPeerEntityContext.class, true);
peerContext.setEntityId(getIdpEntityId());
@@ -281,27 +301,53 @@
return authnRequest;
}
- private LogoutRequest buildLogoutRequest(HttpServletRequest servletRequest) {
- final LogoutRequest logoutRequest = (LogoutRequest) builderFactory.getBuilder(
- LogoutRequest.DEFAULT_ELEMENT_NAME).buildObject(LogoutRequest.DEFAULT_ELEMENT_NAME);
-
- logoutRequest.setID(idGenerator.generateIdentifier());
- logoutRequest.setIssueInstant(new DateTime());
-
- final Issuer issuer = (Issuer) builderFactory.getBuilder(Issuer.DEFAULT_ELEMENT_NAME).buildObject(Issuer.DEFAULT_ELEMENT_NAME);
- issuer.setValue(getSpEntityId());
- logoutRequest.setIssuer(issuer);
-
- final NameID nameID = (NameID) builderFactory.getBuilder(NameID.DEFAULT_ELEMENT_NAME).buildObject(NameID.DEFAULT_ELEMENT_NAME);
- nameID.setValue(servletRequest.getParameter("transientID"));
- nameID.setFormat(NameID.TRANSIENT);
- nameID.setSPNameQualifier(getSpEntityId());
- nameID.setNameQualifier(getIdpEntityId());
- logoutRequest.setNameID(nameID);
-
- return logoutRequest;
- }
-
+ private LogoutRequest buildLogoutRequest(HttpServletRequest servletRequest) {
+ final LogoutRequest logoutRequest = (LogoutRequest) builderFactory.getBuilder(
[... 67 lines stripped ...]
More information about the commits
mailing list