Author: coheigea
Date: Tue May 15 08:47:51 2012
New Revision: 1338600

URL: http://svn.apache.org/viewvc?rev=1338600&view=rev
Log:
Some RelayState updates to the SAML SSO code

Modified:
    
cxf/trunk/rt/rs/security/xml/src/main/java/org/apache/cxf/rs/security/saml/sso/Messages.properties
    
cxf/trunk/rt/rs/security/xml/src/main/java/org/apache/cxf/rs/security/saml/sso/RequestAssertionConsumerService.java
    
cxf/trunk/rt/rs/security/xml/src/main/java/org/apache/cxf/rs/security/saml/sso/SAMLSSOResponseValidator.java
    
cxf/trunk/rt/rs/security/xml/src/main/java/org/apache/cxf/rs/security/saml/sso/filter/AbstractServiceProviderFilter.java

Modified: 
cxf/trunk/rt/rs/security/xml/src/main/java/org/apache/cxf/rs/security/saml/sso/Messages.properties
URL: 
http://svn.apache.org/viewvc/cxf/trunk/rt/rs/security/xml/src/main/java/org/apache/cxf/rs/security/saml/sso/Messages.properties?rev=1338600&r1=1338599&r2=1338600&view=diff
==============================================================================
--- 
cxf/trunk/rt/rs/security/xml/src/main/java/org/apache/cxf/rs/security/saml/sso/Messages.properties
 (original)
+++ 
cxf/trunk/rt/rs/security/xml/src/main/java/org/apache/cxf/rs/security/saml/sso/Messages.properties
 Tue May 15 08:47:51 2012
@@ -21,6 +21,7 @@
 MISSING_TARGET_URI=Target URI is missing
 INVALID_TARGET_URI=Target URI is invalid
 MISSING_RELAY_STATE=RelayState parameter is missing
+INVALID_RELAY_STATE=RelayState parameter is invalid
 MISSING_REQUEST_STATE=Request State is not available
 EXPIRED_REQUEST_STATE=Request State has expired
 MISSING_SAML_RESPONSE=SamlResponse parameter is missing

Modified: 
cxf/trunk/rt/rs/security/xml/src/main/java/org/apache/cxf/rs/security/saml/sso/RequestAssertionConsumerService.java
URL: 
http://svn.apache.org/viewvc/cxf/trunk/rt/rs/security/xml/src/main/java/org/apache/cxf/rs/security/saml/sso/RequestAssertionConsumerService.java?rev=1338600&r1=1338599&r2=1338600&view=diff
==============================================================================
--- 
cxf/trunk/rt/rs/security/xml/src/main/java/org/apache/cxf/rs/security/saml/sso/RequestAssertionConsumerService.java
 (original)
+++ 
cxf/trunk/rt/rs/security/xml/src/main/java/org/apache/cxf/rs/security/saml/sso/RequestAssertionConsumerService.java
 Tue May 15 08:47:51 2012
@@ -91,6 +91,10 @@ public class RequestAssertionConsumerSer
             reportError("MISSING_RELAY_STATE");
             throw new WebApplicationException(400);
         }
+        if (relayState.getBytes().length < 0 || relayState.getBytes().length > 
80) {
+            reportError("INVALID_RELAY_STATE");
+            throw new WebApplicationException(400);
+        }
         RequestState requestState = 
getStateProvider().removeRequestState(relayState);
         if (requestState == null) {
             reportError("MISSING_REQUEST_STATE");

Modified: 
cxf/trunk/rt/rs/security/xml/src/main/java/org/apache/cxf/rs/security/saml/sso/SAMLSSOResponseValidator.java
URL: 
http://svn.apache.org/viewvc/cxf/trunk/rt/rs/security/xml/src/main/java/org/apache/cxf/rs/security/saml/sso/SAMLSSOResponseValidator.java?rev=1338600&r1=1338599&r2=1338600&view=diff
==============================================================================
--- 
cxf/trunk/rt/rs/security/xml/src/main/java/org/apache/cxf/rs/security/saml/sso/SAMLSSOResponseValidator.java
 (original)
+++ 
cxf/trunk/rt/rs/security/xml/src/main/java/org/apache/cxf/rs/security/saml/sso/SAMLSSOResponseValidator.java
 Tue May 15 08:47:51 2012
@@ -67,6 +67,15 @@ public class SAMLSSOResponseValidator {
             throw new WSSecurityException(WSSecurityException.FAILURE, 
"invalidSAMLsecurity");
         }
         
+        // The Response must contain a Destination that matches the 
assertionConsumerURL if it is
+        // signed and received over the POST Binding.
+        String destination = samlResponse.getDestination();
+        if (postBinding && samlResponse.isSigned()
+            && (destination == null || 
!destination.equals(assertionConsumerURL))) {
+            LOG.fine("The Response must contain a destination that matches the 
assertion consumer URL");
+            throw new WSSecurityException(WSSecurityException.FAILURE, 
"invalidSAMLsecurity");
+        }
+        
         // Validate Assertions
         boolean foundValidSubject = false;
         for (org.opensaml.saml2.core.Assertion assertion : 
samlResponse.getAssertions()) {

Modified: 
cxf/trunk/rt/rs/security/xml/src/main/java/org/apache/cxf/rs/security/saml/sso/filter/AbstractServiceProviderFilter.java
URL: 
http://svn.apache.org/viewvc/cxf/trunk/rt/rs/security/xml/src/main/java/org/apache/cxf/rs/security/saml/sso/filter/AbstractServiceProviderFilter.java?rev=1338600&r1=1338599&r2=1338600&view=diff
==============================================================================
--- 
cxf/trunk/rt/rs/security/xml/src/main/java/org/apache/cxf/rs/security/saml/sso/filter/AbstractServiceProviderFilter.java
 (original)
+++ 
cxf/trunk/rt/rs/security/xml/src/main/java/org/apache/cxf/rs/security/saml/sso/filter/AbstractServiceProviderFilter.java
 Tue May 15 08:47:51 2012
@@ -196,7 +196,7 @@ public abstract class AbstractServicePro
                                                      webAppContext,
                                                      
System.currentTimeMillis());
         
-        String relayState = UUID.randomUUID().toString();
+        String relayState = URLEncoder.encode(UUID.randomUUID().toString(), 
"UTF-8");
         getStateProvider().setRequestState(relayState, requestState);
         info.setRelayState(relayState);
         info.setWebAppContext(webAppContext);


Reply via email to