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.git


The following commit(s) were added to refs/heads/master by this push:
     new 0b3dbe8  CXF-7616 - Add support for (SAML) IssuedToken policy 
validation
0b3dbe8 is described below

commit 0b3dbe8078ee4164c7ddc3242d6dc92ebf9ce2f6
Author: Colm O hEigeartaigh <[email protected]>
AuthorDate: Thu Jan 18 14:53:14 2018 +0000

    CXF-7616 - Add support for (SAML) IssuedToken policy validation
---
 .../AbstractSupportingTokenPolicyValidator.java        | 18 ++++++++++++++++++
 .../ConcreteSupportingTokenPolicyValidator.java        |  7 ++++++-
 .../EncryptedTokenPolicyValidator.java                 |  7 ++++++-
 .../EndorsingEncryptedTokenPolicyValidator.java        |  7 ++++++-
 .../EndorsingTokenPolicyValidator.java                 |  7 ++++++-
 .../SignedEncryptedTokenPolicyValidator.java           |  7 ++++++-
 .../SignedEndorsingEncryptedTokenPolicyValidator.java  |  7 ++++++-
 .../SignedEndorsingTokenPolicyValidator.java           |  7 ++++++-
 .../policyvalidators/SignedTokenPolicyValidator.java   |  7 ++++++-
 .../org/apache/cxf/systest/sts/transport/DoubleIt.wsdl |  2 +-
 .../cxf/systest/wssec/examples/saml/DoubleItSaml.wsdl  |  2 +-
 11 files changed, 68 insertions(+), 10 deletions(-)

diff --git 
a/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/policyvalidators/AbstractSupportingTokenPolicyValidator.java
 
b/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/policyvalidators/AbstractSupportingTokenPolicyValidator.java
index 854218b..a664d49 100644
--- 
a/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/policyvalidators/AbstractSupportingTokenPolicyValidator.java
+++ 
b/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/policyvalidators/AbstractSupportingTokenPolicyValidator.java
@@ -68,6 +68,7 @@ import 
org.apache.wss4j.policy.model.AbstractToken.DerivedKeys;
 import org.apache.wss4j.policy.model.EncryptedElements;
 import org.apache.wss4j.policy.model.EncryptedParts;
 import org.apache.wss4j.policy.model.Header;
+import org.apache.wss4j.policy.model.IssuedToken;
 import org.apache.wss4j.policy.model.RequiredElements;
 import org.apache.wss4j.policy.model.SignedElements;
 import org.apache.wss4j.policy.model.SignedParts;
@@ -903,4 +904,21 @@ public abstract class 
AbstractSupportingTokenPolicyValidator extends AbstractSec
             PolicyUtils.assertPolicy(aim, new 
QName(token.getName().getNamespaceURI(), derivedKeys.name()));
         }
     }
+
+    protected static boolean isSamlTokenRequiredForIssuedToken(IssuedToken 
issuedToken) {
+        Element template = issuedToken.getRequestSecurityTokenTemplate();
+        if (template != null) {
+            Element child = DOMUtils.getFirstElement(template);
+            while (child != null) {
+                if ("TokenType".equals(child.getLocalName())) {
+                    String content = child.getTextContent();
+                    return WSS4JConstants.WSS_SAML_TOKEN_TYPE.equals(content)
+                        || WSS4JConstants.WSS_SAML2_TOKEN_TYPE.equals(content);
+                }
+                child = DOMUtils.getNextElement(child);
+            }
+        }
+        return false;
+    }
+
 }
diff --git 
a/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/policyvalidators/ConcreteSupportingTokenPolicyValidator.java
 
b/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/policyvalidators/ConcreteSupportingTokenPolicyValidator.java
index 0c9a7c1..9f267ca 100644
--- 
a/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/policyvalidators/ConcreteSupportingTokenPolicyValidator.java
+++ 
b/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/policyvalidators/ConcreteSupportingTokenPolicyValidator.java
@@ -96,7 +96,12 @@ public class ConcreteSupportingTokenPolicyValidator extends 
AbstractSupportingTo
                     if (!processSCTokens(parameters, false)) {
                         processingFailed = true;
                     }
-                } else if (!(token instanceof IssuedToken)) {
+                } else if (token instanceof IssuedToken) {
+                    IssuedToken issuedToken = (IssuedToken)token;
+                    if (isSamlTokenRequiredForIssuedToken(issuedToken) && 
!processSAMLTokens(parameters)) {
+                        processingFailed = true;
+                    }
+                } else {
                     processingFailed = true;
                 }
 
diff --git 
a/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/policyvalidators/EncryptedTokenPolicyValidator.java
 
b/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/policyvalidators/EncryptedTokenPolicyValidator.java
index 0494f2a..6cbaba3 100644
--- 
a/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/policyvalidators/EncryptedTokenPolicyValidator.java
+++ 
b/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/policyvalidators/EncryptedTokenPolicyValidator.java
@@ -104,7 +104,12 @@ public class EncryptedTokenPolicyValidator extends 
AbstractSupportingTokenPolicy
                     if (!processSAMLTokens(parameters)) {
                         processingFailed = true;
                     }
-                } else if (!(token instanceof IssuedToken)) {
+                } else if (token instanceof IssuedToken) {
+                    IssuedToken issuedToken = (IssuedToken)token;
+                    if (isSamlTokenRequiredForIssuedToken(issuedToken) && 
!processSAMLTokens(parameters)) {
+                        processingFailed = true;
+                    }
+                } else {
                     processingFailed = true;
                 }
 
diff --git 
a/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/policyvalidators/EndorsingEncryptedTokenPolicyValidator.java
 
b/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/policyvalidators/EndorsingEncryptedTokenPolicyValidator.java
index 743fd56..9f4fd14 100644
--- 
a/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/policyvalidators/EndorsingEncryptedTokenPolicyValidator.java
+++ 
b/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/policyvalidators/EndorsingEncryptedTokenPolicyValidator.java
@@ -113,7 +113,12 @@ public class EndorsingEncryptedTokenPolicyValidator 
extends AbstractSupportingTo
                     if (!processSAMLTokens(parameters)) {
                         processingFailed = true;
                     }
-                } else if (!(token instanceof IssuedToken)) {
+                } else if (token instanceof IssuedToken) {
+                    IssuedToken issuedToken = (IssuedToken)token;
+                    if (isSamlTokenRequiredForIssuedToken(issuedToken) && 
!processSAMLTokens(parameters)) {
+                        processingFailed = true;
+                    }
+                } else {
                     processingFailed = true;
                 }
 
diff --git 
a/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/policyvalidators/EndorsingTokenPolicyValidator.java
 
b/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/policyvalidators/EndorsingTokenPolicyValidator.java
index e013e7b..d5f9de0 100644
--- 
a/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/policyvalidators/EndorsingTokenPolicyValidator.java
+++ 
b/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/policyvalidators/EndorsingTokenPolicyValidator.java
@@ -102,7 +102,12 @@ public class EndorsingTokenPolicyValidator extends 
AbstractSupportingTokenPolicy
                     if (!processSAMLTokens(parameters)) {
                         processingFailed = true;
                     }
-                } else if (!(token instanceof IssuedToken)) {
+                } else if (token instanceof IssuedToken) {
+                    IssuedToken issuedToken = (IssuedToken)token;
+                    if (isSamlTokenRequiredForIssuedToken(issuedToken) && 
!processSAMLTokens(parameters)) {
+                        processingFailed = true;
+                    }
+                } else {
                     processingFailed = true;
                 }
 
diff --git 
a/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/policyvalidators/SignedEncryptedTokenPolicyValidator.java
 
b/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/policyvalidators/SignedEncryptedTokenPolicyValidator.java
index 6d929d3..1303688 100644
--- 
a/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/policyvalidators/SignedEncryptedTokenPolicyValidator.java
+++ 
b/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/policyvalidators/SignedEncryptedTokenPolicyValidator.java
@@ -104,7 +104,12 @@ public class SignedEncryptedTokenPolicyValidator extends 
AbstractSupportingToken
                     if (!processSAMLTokens(parameters)) {
                         processingFailed = true;
                     }
-                } else if (!(token instanceof IssuedToken)) {
+                } else if (token instanceof IssuedToken) {
+                    IssuedToken issuedToken = (IssuedToken)token;
+                    if (isSamlTokenRequiredForIssuedToken(issuedToken) && 
!processSAMLTokens(parameters)) {
+                        processingFailed = true;
+                    }
+                } else {
                     processingFailed = true;
                 }
 
diff --git 
a/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/policyvalidators/SignedEndorsingEncryptedTokenPolicyValidator.java
 
b/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/policyvalidators/SignedEndorsingEncryptedTokenPolicyValidator.java
index 2b0e106..4a50f55 100644
--- 
a/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/policyvalidators/SignedEndorsingEncryptedTokenPolicyValidator.java
+++ 
b/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/policyvalidators/SignedEndorsingEncryptedTokenPolicyValidator.java
@@ -113,7 +113,12 @@ public class SignedEndorsingEncryptedTokenPolicyValidator 
extends AbstractSuppor
                     if (!processSCTokens(parameters, derived)) {
                         processingFailed = true;
                     }
-                } else if (!(token instanceof IssuedToken)) {
+                } else if (token instanceof IssuedToken) {
+                    IssuedToken issuedToken = (IssuedToken)token;
+                    if (isSamlTokenRequiredForIssuedToken(issuedToken) && 
!processSAMLTokens(parameters)) {
+                        processingFailed = true;
+                    }
+                } else {
                     processingFailed = true;
                 }
 
diff --git 
a/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/policyvalidators/SignedEndorsingTokenPolicyValidator.java
 
b/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/policyvalidators/SignedEndorsingTokenPolicyValidator.java
index b2a642e..a64382d 100644
--- 
a/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/policyvalidators/SignedEndorsingTokenPolicyValidator.java
+++ 
b/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/policyvalidators/SignedEndorsingTokenPolicyValidator.java
@@ -102,7 +102,12 @@ public class SignedEndorsingTokenPolicyValidator extends 
AbstractSupportingToken
                     if (!processSCTokens(parameters, derived)) {
                         processingFailed = true;
                     }
-                } else if (!(token instanceof IssuedToken)) {
+                } else if (token instanceof IssuedToken) {
+                    IssuedToken issuedToken = (IssuedToken)token;
+                    if (isSamlTokenRequiredForIssuedToken(issuedToken) && 
!processSAMLTokens(parameters)) {
+                        processingFailed = true;
+                    }
+                } else {
                     processingFailed = true;
                 }
 
diff --git 
a/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/policyvalidators/SignedTokenPolicyValidator.java
 
b/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/policyvalidators/SignedTokenPolicyValidator.java
index 4c95dad..f84346b 100644
--- 
a/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/policyvalidators/SignedTokenPolicyValidator.java
+++ 
b/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/policyvalidators/SignedTokenPolicyValidator.java
@@ -94,7 +94,12 @@ public class SignedTokenPolicyValidator extends 
AbstractSupportingTokenPolicyVal
                     if (!processSCTokens(parameters, false)) {
                         processingFailed = true;
                     }
-                } else if (!(token instanceof IssuedToken)) {
+                } else if (token instanceof IssuedToken) {
+                    IssuedToken issuedToken = (IssuedToken)token;
+                    if (isSamlTokenRequiredForIssuedToken(issuedToken) && 
!processSAMLTokens(parameters)) {
+                        processingFailed = true;
+                    }
+                } else {
                     processingFailed = true;
                 }
 
diff --git 
a/services/sts/systests/basic/src/test/resources/org/apache/cxf/systest/sts/transport/DoubleIt.wsdl
 
b/services/sts/systests/basic/src/test/resources/org/apache/cxf/systest/sts/transport/DoubleIt.wsdl
index 4da85f5..69287c4 100644
--- 
a/services/sts/systests/basic/src/test/resources/org/apache/cxf/systest/sts/transport/DoubleIt.wsdl
+++ 
b/services/sts/systests/basic/src/test/resources/org/apache/cxf/systest/sts/transport/DoubleIt.wsdl
@@ -520,7 +520,7 @@
                             </sp:RequestSecurityTokenTemplate>
                             <wsp:Policy>
                                 <sp:RequireInternalReference/>
-                                <sp:RequireDerivedKeys/>
+                                <!-- TODO <sp:RequireDerivedKeys/> -->
                             </wsp:Policy>
                             <sp:Issuer>
                                 <wsaw:Address>http://localhost:8080/STS/STSUT
diff --git 
a/systests/ws-security-examples/src/test/resources/org/apache/cxf/systest/wssec/examples/saml/DoubleItSaml.wsdl
 
b/systests/ws-security-examples/src/test/resources/org/apache/cxf/systest/wssec/examples/saml/DoubleItSaml.wsdl
index 70c2233..af0b2df 100644
--- 
a/systests/ws-security-examples/src/test/resources/org/apache/cxf/systest/wssec/examples/saml/DoubleItSaml.wsdl
+++ 
b/systests/ws-security-examples/src/test/resources/org/apache/cxf/systest/wssec/examples/saml/DoubleItSaml.wsdl
@@ -643,7 +643,7 @@
                                 
<t:SignWith>http://www.w3.org/2000/09/xmldsig#hmac-sha1</t:SignWith>
                             </sp:RequestSecurityTokenTemplate>
                             <wsp:Policy>
-                                <sp:RequireDerivedKeys/>
+                                <!-- TODO re-enable <sp:RequireDerivedKeys/> 
-->
                                 <sp:RequireInternalReference/>
                             </wsp:Policy>
                         </sp:IssuedToken>

-- 
To stop receiving notification emails like this one, please contact
['"[email protected]" <[email protected]>'].

Reply via email to