Author: coheigea
Date: Fri Jul  4 15:44:00 2014
New Revision: 1607879

URL: http://svn.apache.org/r1607879
Log:
More work on asserting policies directly in WSS4J

Modified:
    
webservices/wss4j/trunk/ws-security-policy-stax/src/main/java/org/apache/wss4j/policy/stax/PolicyEnforcer.java
    
webservices/wss4j/trunk/ws-security-policy-stax/src/main/java/org/apache/wss4j/policy/stax/assertionStates/HttpsTokenAssertionState.java
    
webservices/wss4j/trunk/ws-security-policy-stax/src/main/java/org/apache/wss4j/policy/stax/assertionStates/IssuedTokenAssertionState.java
    
webservices/wss4j/trunk/ws-security-policy-stax/src/main/java/org/apache/wss4j/policy/stax/assertionStates/SpnegoContextTokenAssertionState.java
    
webservices/wss4j/trunk/ws-security-policy-stax/src/main/java/org/apache/wss4j/policy/stax/assertionStates/TokenAssertionState.java
    
webservices/wss4j/trunk/ws-security-policy-stax/src/main/java/org/apache/wss4j/policy/stax/assertionStates/TokenProtectionAssertionState.java

Modified: 
webservices/wss4j/trunk/ws-security-policy-stax/src/main/java/org/apache/wss4j/policy/stax/PolicyEnforcer.java
URL: 
http://svn.apache.org/viewvc/webservices/wss4j/trunk/ws-security-policy-stax/src/main/java/org/apache/wss4j/policy/stax/PolicyEnforcer.java?rev=1607879&r1=1607878&r2=1607879&view=diff
==============================================================================
--- 
webservices/wss4j/trunk/ws-security-policy-stax/src/main/java/org/apache/wss4j/policy/stax/PolicyEnforcer.java
 (original)
+++ 
webservices/wss4j/trunk/ws-security-policy-stax/src/main/java/org/apache/wss4j/policy/stax/PolicyEnforcer.java
 Fri Jul  4 15:44:00 2014
@@ -62,6 +62,8 @@ import org.apache.wss4j.policy.model.Sig
 import org.apache.wss4j.policy.model.SignedParts;
 import org.apache.wss4j.policy.model.SpnegoContextToken;
 import org.apache.wss4j.policy.model.SupportingTokens;
+import org.apache.wss4j.policy.model.Trust10;
+import org.apache.wss4j.policy.model.Trust13;
 import org.apache.wss4j.policy.model.UsernameToken;
 import org.apache.wss4j.policy.model.Wss10;
 import org.apache.wss4j.policy.model.X509Token;
@@ -325,7 +327,7 @@ public class PolicyEnforcer implements S
             assertableList.add(new 
SamlTokenAssertionState(abstractSecurityAssertion, !tokenRequired, 
policyAsserter, initiator));
         } else if (abstractSecurityAssertion instanceof RelToken) {
             assertableList.add(new 
RelTokenAssertionState(abstractSecurityAssertion, !tokenRequired, 
policyAsserter, initiator));
-        } else if (abstractSecurityAssertion instanceof HttpsToken && 
!initiator) {
+        } else if (abstractSecurityAssertion instanceof HttpsToken) {
             assertableList.add(new 
HttpsTokenAssertionState(abstractSecurityAssertion, !tokenRequired, 
policyAsserter, initiator));
         } else if (abstractSecurityAssertion instanceof KeyValueToken) {
             assertableList.add(new 
KeyValueTokenAssertionState(abstractSecurityAssertion, !tokenRequired, 
policyAsserter, initiator));
@@ -419,6 +421,41 @@ public class PolicyEnforcer implements S
                     }
                 }
             }
+        } else if (abstractSecurityAssertion instanceof Trust10) {
+            Trust10 trust10 = (Trust10)abstractSecurityAssertion;
+            String namespace = trust10.getName().getNamespaceURI();
+            policyAsserter.assertPolicy(abstractSecurityAssertion);
+            
+            if (trust10.isMustSupportClientChallenge()) {
+                policyAsserter.assertPolicy(new QName(namespace, 
SPConstants.MUST_SUPPORT_CLIENT_CHALLENGE));
+            }
+            if (trust10.isMustSupportIssuedTokens()) {
+                policyAsserter.assertPolicy(new QName(namespace, 
SPConstants.MUST_SUPPORT_ISSUED_TOKENS));
+            }
+            if (trust10.isMustSupportServerChallenge()) {
+                policyAsserter.assertPolicy(new QName(namespace, 
SPConstants.MUST_SUPPORT_SERVER_CHALLENGE));
+            }
+            if (trust10.isRequireClientEntropy()) {
+                policyAsserter.assertPolicy(new QName(namespace, 
SPConstants.REQUIRE_CLIENT_ENTROPY));
+            }
+            if (trust10.isRequireServerEntropy()) {
+                policyAsserter.assertPolicy(new QName(namespace, 
SPConstants.REQUIRE_SERVER_ENTROPY));
+            }
+            if (trust10 instanceof Trust13) {
+                Trust13 trust13 = (Trust13)trust10;
+                if (trust13.isMustSupportInteractiveChallenge()) {
+                    policyAsserter.assertPolicy(new QName(namespace, 
SPConstants.MUST_SUPPORT_INTERACTIVE_CHALLENGE));
+                }
+                if (trust13.isRequireAppliesTo()) {
+                    policyAsserter.assertPolicy(new QName(namespace, 
SPConstants.REQUIRE_APPLIES_TO));
+                }
+                if (trust13.isRequireRequestSecurityTokenCollection()) {
+                    policyAsserter.assertPolicy(new QName(namespace, 
SPConstants.REQUIRE_REQUEST_SECURITY_TOKEN_COLLECTION));
+                }
+                if (trust13.isScopePolicy15()) {
+                    policyAsserter.assertPolicy(new QName(namespace, 
SPConstants.SCOPE_POLICY_15));
+                }
+            }
         } else {
             policyAsserter.assertPolicy(abstractSecurityAssertion);
         }

Modified: 
webservices/wss4j/trunk/ws-security-policy-stax/src/main/java/org/apache/wss4j/policy/stax/assertionStates/HttpsTokenAssertionState.java
URL: 
http://svn.apache.org/viewvc/webservices/wss4j/trunk/ws-security-policy-stax/src/main/java/org/apache/wss4j/policy/stax/assertionStates/HttpsTokenAssertionState.java?rev=1607879&r1=1607878&r2=1607879&view=diff
==============================================================================
--- 
webservices/wss4j/trunk/ws-security-policy-stax/src/main/java/org/apache/wss4j/policy/stax/assertionStates/HttpsTokenAssertionState.java
 (original)
+++ 
webservices/wss4j/trunk/ws-security-policy-stax/src/main/java/org/apache/wss4j/policy/stax/assertionStates/HttpsTokenAssertionState.java
 Fri Jul  4 15:44:00 2014
@@ -73,7 +73,7 @@ public class HttpsTokenAssertionState ex
             getPolicyAsserter().unassertPolicy(getAssertion(), 
getErrorMessage());
             return false;
         }
-        if (httpsToken.getAuthenticationType() != null) {
+        if (!isInitiator() && httpsToken.getAuthenticationType() != null) {
             String namespace = getAssertion().getName().getNamespaceURI();
             
             switch (httpsToken.getAuthenticationType()) {

Modified: 
webservices/wss4j/trunk/ws-security-policy-stax/src/main/java/org/apache/wss4j/policy/stax/assertionStates/IssuedTokenAssertionState.java
URL: 
http://svn.apache.org/viewvc/webservices/wss4j/trunk/ws-security-policy-stax/src/main/java/org/apache/wss4j/policy/stax/assertionStates/IssuedTokenAssertionState.java?rev=1607879&r1=1607878&r2=1607879&view=diff
==============================================================================
--- 
webservices/wss4j/trunk/ws-security-policy-stax/src/main/java/org/apache/wss4j/policy/stax/assertionStates/IssuedTokenAssertionState.java
 (original)
+++ 
webservices/wss4j/trunk/ws-security-policy-stax/src/main/java/org/apache/wss4j/policy/stax/assertionStates/IssuedTokenAssertionState.java
 Fri Jul  4 15:44:00 2014
@@ -84,6 +84,7 @@ public class IssuedTokenAssertionState e
                     
!issuedToken.getIssuerName().equals(issuedTokenSecurityEvent.getIssuerName())) {
                 setErrorMessage("IssuerName in Policy (" + 
issuedToken.getIssuerName() +
                         ") didn't match with the one in the IssuedToken (" + 
issuedTokenSecurityEvent.getIssuerName() + ")");
+                getPolicyAsserter().unassertPolicy(getAssertion(), 
getErrorMessage());
                 return false;
             }
             if (issuedToken.getRequestSecurityTokenTemplate() != null) {
@@ -92,6 +93,7 @@ public class IssuedTokenAssertionState e
                     String errorMsg = 
checkIssuedTokenTemplate(issuedToken.getRequestSecurityTokenTemplate(), 
samlTokenSecurityEvent);
                     if (errorMsg != null) {
                         setErrorMessage(errorMsg);
+                        getPolicyAsserter().unassertPolicy(getAssertion(), 
getErrorMessage());
                         return false;
                     }
                 } else if (issuedTokenSecurityEvent instanceof 
KerberosTokenSecurityEvent) {
@@ -99,6 +101,7 @@ public class IssuedTokenAssertionState e
                     String errorMsg = 
checkIssuedTokenTemplate(issuedToken.getRequestSecurityTokenTemplate(), 
kerberosTokenSecurityEvent);
                     if (errorMsg != null) {
                         setErrorMessage(errorMsg);
+                        getPolicyAsserter().unassertPolicy(getAssertion(), 
getErrorMessage());
                         return false;
                     }
                 }
@@ -110,15 +113,18 @@ public class IssuedTokenAssertionState e
                     validateClaims((Element) claims, 
(SamlTokenSecurityEvent)issuedTokenSecurityEvent);
                 if (errorMsg != null) {
                     setErrorMessage(errorMsg);
+                    getPolicyAsserter().unassertPolicy(getAssertion(), 
getErrorMessage());
                     return false;
                 }
             }
         } catch (XMLSecurityException e) {
+            getPolicyAsserter().unassertPolicy(getAssertion(), 
getErrorMessage());
             throw new WSSPolicyException(e.getMessage(), e);
         }
 
         //always return true to prevent false alarm in case additional tokens 
with the same usage
         //appears in the message but do not fulfill the policy and are also 
not needed to fulfil the policy.
+        getPolicyAsserter().assertPolicy(getAssertion());
         return true;
     }
 

Modified: 
webservices/wss4j/trunk/ws-security-policy-stax/src/main/java/org/apache/wss4j/policy/stax/assertionStates/SpnegoContextTokenAssertionState.java
URL: 
http://svn.apache.org/viewvc/webservices/wss4j/trunk/ws-security-policy-stax/src/main/java/org/apache/wss4j/policy/stax/assertionStates/SpnegoContextTokenAssertionState.java?rev=1607879&r1=1607878&r2=1607879&view=diff
==============================================================================
--- 
webservices/wss4j/trunk/ws-security-policy-stax/src/main/java/org/apache/wss4j/policy/stax/assertionStates/SpnegoContextTokenAssertionState.java
 (original)
+++ 
webservices/wss4j/trunk/ws-security-policy-stax/src/main/java/org/apache/wss4j/policy/stax/assertionStates/SpnegoContextTokenAssertionState.java
 Fri Jul  4 15:44:00 2014
@@ -38,6 +38,10 @@ public class SpnegoContextTokenAssertion
     public SpnegoContextTokenAssertionState(AbstractSecurityAssertion 
assertion, boolean asserted, 
                                             PolicyAsserter policyAsserter, 
boolean initiator) {
         super(assertion, asserted, policyAsserter, initiator);
+        
+        if (asserted) {
+            getPolicyAsserter().assertPolicy(getAssertion());
+        }
     }
 
     @Override

Modified: 
webservices/wss4j/trunk/ws-security-policy-stax/src/main/java/org/apache/wss4j/policy/stax/assertionStates/TokenAssertionState.java
URL: 
http://svn.apache.org/viewvc/webservices/wss4j/trunk/ws-security-policy-stax/src/main/java/org/apache/wss4j/policy/stax/assertionStates/TokenAssertionState.java?rev=1607879&r1=1607878&r2=1607879&view=diff
==============================================================================
--- 
webservices/wss4j/trunk/ws-security-policy-stax/src/main/java/org/apache/wss4j/policy/stax/assertionStates/TokenAssertionState.java
 (original)
+++ 
webservices/wss4j/trunk/ws-security-policy-stax/src/main/java/org/apache/wss4j/policy/stax/assertionStates/TokenAssertionState.java
 Fri Jul  4 15:44:00 2014
@@ -285,4 +285,8 @@ public abstract class TokenAssertionStat
     protected PolicyAsserter getPolicyAsserter() {
         return policyAsserter;
     }
+    
+    protected boolean isInitiator() {
+        return initiator;
+    }
 }

Modified: 
webservices/wss4j/trunk/ws-security-policy-stax/src/main/java/org/apache/wss4j/policy/stax/assertionStates/TokenProtectionAssertionState.java
URL: 
http://svn.apache.org/viewvc/webservices/wss4j/trunk/ws-security-policy-stax/src/main/java/org/apache/wss4j/policy/stax/assertionStates/TokenProtectionAssertionState.java?rev=1607879&r1=1607878&r2=1607879&view=diff
==============================================================================
--- 
webservices/wss4j/trunk/ws-security-policy-stax/src/main/java/org/apache/wss4j/policy/stax/assertionStates/TokenProtectionAssertionState.java
 (original)
+++ 
webservices/wss4j/trunk/ws-security-policy-stax/src/main/java/org/apache/wss4j/policy/stax/assertionStates/TokenProtectionAssertionState.java
 Fri Jul  4 15:44:00 2014
@@ -93,9 +93,6 @@ public class TokenProtectionAssertionSta
         AbstractSymmetricAsymmetricBinding abstractSymmetricAsymmetricBinding 
= (AbstractSymmetricAsymmetricBinding) getAssertion();
         boolean protectTokens = 
abstractSymmetricAsymmetricBinding.isProtectTokens();
         String namespace = getAssertion().getName().getNamespaceURI();
-        if (protectTokens) {
-            policyAsserter.assertPolicy(new QName(namespace, 
SPConstants.PROTECT_TOKENS));
-        }
 
         if (securityEvent instanceof SignedElementSecurityEvent) {
             SignedElementSecurityEvent signedElementSecurityEvent = 
(SignedElementSecurityEvent) securityEvent;
@@ -151,6 +148,8 @@ public class TokenProtectionAssertionSta
                 }
             }
         }
+        
+        policyAsserter.assertPolicy(new QName(namespace, 
SPConstants.PROTECT_TOKENS));
         return true;
     }
 


Reply via email to