[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