You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by co...@apache.org on 2018/07/13 17:03:09 UTC

[cxf-fediz] 03/04: FEDIZ-221 - Add destination to LogoutResponse

This is an automated email from the ASF dual-hosted git repository.

coheigea pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/cxf-fediz.git

commit 51a08606ffa86aac566503790b97f4cc8d045d1e
Author: Colm O hEigeartaigh <co...@apache.org>
AuthorDate: Fri Jul 13 16:09:14 2018 +0100

    FEDIZ-221 - Add destination to LogoutResponse
---
 .../cxf/fediz/service/idp/beans/samlsso/SamlResponseCreator.java  | 8 ++++----
 .../fediz/service/idp/samlsso/SAML2PResponseComponentBuilder.java | 4 +++-
 .../idp/src/main/webapp/WEB-INF/flows/saml-validate-request.xml   | 3 ++-
 .../test/java/org/apache/cxf/fediz/systests/samlsso/IdpTest.java  | 4 ++--
 4 files changed, 11 insertions(+), 8 deletions(-)

diff --git a/services/idp-core/src/main/java/org/apache/cxf/fediz/service/idp/beans/samlsso/SamlResponseCreator.java b/services/idp-core/src/main/java/org/apache/cxf/fediz/service/idp/beans/samlsso/SamlResponseCreator.java
index 9ca6b4b..426bbf7 100644
--- a/services/idp-core/src/main/java/org/apache/cxf/fediz/service/idp/beans/samlsso/SamlResponseCreator.java
+++ b/services/idp-core/src/main/java/org/apache/cxf/fediz/service/idp/beans/samlsso/SamlResponseCreator.java
@@ -97,10 +97,10 @@ public class SamlResponseCreator {
         }
     }
 
-    public String createSAMLLogoutResponse(RequestContext context, Idp idp, String requestId)
+    public String createSAMLLogoutResponse(RequestContext context, Idp idp, String destination, String requestId)
                                          throws ProcessingException {
         try {
-            Element response = createLogoutResponse(idp, requestId);
+            Element response = createLogoutResponse(idp, destination, requestId);
             return encodeResponse(response);
         } catch (Exception ex) {
             LOG.warn("Error marshalling SAML Token: {}", ex.getMessage());
@@ -179,7 +179,7 @@ public class SamlResponseCreator {
         return policyElement;
     }
 
-    protected Element createLogoutResponse(Idp idp, String requestID) throws Exception {
+    protected Element createLogoutResponse(Idp idp, String destination, String requestID) throws Exception {
         Document doc = DOMUtils.newDocument();
 
         Status status =
@@ -188,7 +188,7 @@ public class SamlResponseCreator {
             );
         String issuer = useRealmForIssuer ? idp.getRealm() : idp.getIdpUrl().toString();
         LogoutResponse response =
-            SAML2PResponseComponentBuilder.createSAMLLogoutResponse(requestID, issuer, status);
+            SAML2PResponseComponentBuilder.createSAMLLogoutResponse(requestID, issuer, status, destination);
 
         Element policyElement = OpenSAMLUtil.toDom(response, doc);
         doc.appendChild(policyElement);
diff --git a/services/idp-core/src/main/java/org/apache/cxf/fediz/service/idp/samlsso/SAML2PResponseComponentBuilder.java b/services/idp-core/src/main/java/org/apache/cxf/fediz/service/idp/samlsso/SAML2PResponseComponentBuilder.java
index 7e48340..bba31a8 100644
--- a/services/idp-core/src/main/java/org/apache/cxf/fediz/service/idp/samlsso/SAML2PResponseComponentBuilder.java
+++ b/services/idp-core/src/main/java/org/apache/cxf/fediz/service/idp/samlsso/SAML2PResponseComponentBuilder.java
@@ -82,7 +82,8 @@ public final class SAML2PResponseComponentBuilder {
     public static LogoutResponse createSAMLLogoutResponse(
         String inResponseTo,
         String issuer,
-        Status status
+        Status status,
+        String destination
     ) {
         if (logoutResponseBuilder == null) {
             logoutResponseBuilder = (SAMLObjectBuilder<LogoutResponse>)
@@ -96,6 +97,7 @@ public final class SAML2PResponseComponentBuilder {
         response.setIssuer(createIssuer(issuer));
         response.setStatus(status);
         response.setVersion(SAMLVersion.VERSION_20);
+        response.setDestination(destination);
 
         return response;
     }
diff --git a/services/idp/src/main/webapp/WEB-INF/flows/saml-validate-request.xml b/services/idp/src/main/webapp/WEB-INF/flows/saml-validate-request.xml
index 4e62885..61cdadc 100644
--- a/services/idp/src/main/webapp/WEB-INF/flows/saml-validate-request.xml
+++ b/services/idp/src/main/webapp/WEB-INF/flows/saml-validate-request.xml
@@ -233,7 +233,8 @@
             <evaluate expression="authnRequestParser.retrieveRequestIssuer(flowRequestContext)" 
                       result="flowScope.requestIssuer"/>
         </on-entry>
-        <evaluate expression="samlResponseCreator.createSAMLLogoutResponse(flowRequestContext, flowScope.idpConfig, flowScope.requestId)"
+        <evaluate expression="samlResponseCreator.createSAMLLogoutResponse(flowRequestContext, flowScope.idpConfig, 
+        		flowScope.consumerURL, flowScope.requestId)"
                   result="flowScope.logoutResponse"/>                                               
         <transition to="invalidateSessionAction" />
     </action-state>
diff --git a/systests/samlsso/src/test/java/org/apache/cxf/fediz/systests/samlsso/IdpTest.java b/systests/samlsso/src/test/java/org/apache/cxf/fediz/systests/samlsso/IdpTest.java
index 969a6aa..ee76fd4 100644
--- a/systests/samlsso/src/test/java/org/apache/cxf/fediz/systests/samlsso/IdpTest.java
+++ b/systests/samlsso/src/test/java/org/apache/cxf/fediz/systests/samlsso/IdpTest.java
@@ -1731,7 +1731,7 @@ public class IdpTest {
 
         LogoutResponse logoutResponse = (LogoutResponse)OpenSAMLUtil.fromDom(responseDoc.getDocumentElement());
         Assert.assertNotNull(logoutResponse);
-        // TODO further checks
+        Assert.assertEquals("https://localhost:8080/logout", logoutResponse.getDestination());
 
         webClient.close();
 
@@ -1847,7 +1847,7 @@ public class IdpTest {
         webClient.close();
 
         // 3. now we try to access the idp without authentication but with the existing cookies
-        // to see if we are really logged out - it should work OK as our LogoutRequest was expired
+        // to see if we are really logged out - we should still be logged in as our LogoutRequest was expired
         webClient = new WebClient();
         webClient.setCookieManager(cookieManager);
         webClient.getOptions().setUseInsecureSSL(true);