Author: dvaleri
Date: Thu Jul 22 17:19:34 2010
New Revision: 966762

URL: http://svn.apache.org/viewvc?rev=966762&view=rev
Log:
[CXF-2905] Added ability to send WS-T 1.4 ActAs element in RST.

Modified:
    
cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/SecurityConstants.java
    
cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/policy/interceptors/IssuedTokenInterceptorProvider.java
    
cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/trust/STSClient.java
    
cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/trust/STSUtils.java

Modified: 
cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/SecurityConstants.java
URL: 
http://svn.apache.org/viewvc/cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/SecurityConstants.java?rev=966762&r1=966761&r2=966762&view=diff
==============================================================================
--- 
cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/SecurityConstants.java
 (original)
+++ 
cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/SecurityConstants.java
 Thu Jul 22 17:19:34 2010
@@ -70,6 +70,8 @@ public final class SecurityConstants {
     public static final String STS_TOKEN_USERNAME = 
"ws-security.sts.token.username";
     
     public static final String STS_TOKEN_DO_CANCEL = 
"ws-security.sts.token.do.cancel";
+    
+    public static final String STS_TOKEN_ACT_AS = 
"ws-security.sts.token.act-as";
 
     public static final Set<String> ALL_PROPERTIES;
     
@@ -79,7 +81,8 @@ public final class SecurityConstants {
             SIGNATURE_USERNAME, SIGNATURE_PROPERTIES, SIGNATURE_CRYPTO,
             ENCRYPT_USERNAME, ENCRYPT_PROPERTIES, ENCRYPT_CRYPTO,
             TOKEN, TOKEN_ID, STS_CLIENT, STS_TOKEN_PROPERTIES, 
STS_TOKEN_CRYPTO,
-            STS_TOKEN_DO_CANCEL, TIMESTAMP_TTL, ALWAYS_ENCRYPT_UT
+            STS_TOKEN_DO_CANCEL, TIMESTAMP_TTL, ALWAYS_ENCRYPT_UT,
+            STS_TOKEN_ACT_AS
         }));
         ALL_PROPERTIES = Collections.unmodifiableSet(s);
     }

Modified: 
cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/policy/interceptors/IssuedTokenInterceptorProvider.java
URL: 
http://svn.apache.org/viewvc/cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/policy/interceptors/IssuedTokenInterceptorProvider.java?rev=966762&r1=966761&r2=966762&view=diff
==============================================================================
--- 
cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/policy/interceptors/IssuedTokenInterceptorProvider.java
 (original)
+++ 
cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/policy/interceptors/IssuedTokenInterceptorProvider.java
 Thu Jul 22 17:19:34 2010
@@ -80,6 +80,10 @@ public class IssuedTokenInterceptorProvi
             client.setEndpointName(ep.getEndpointInfo().getName().toString() + 
".sts-client");
             client.setBeanName(ep.getEndpointInfo().getName().toString() + 
".sts-client");
         }
+        
+        // Transpose ActAs info from original request to the STS client.
+        
client.setActAs(message.getContextualProperty(SecurityConstants.STS_TOKEN_ACT_AS));
+        
         return client;
     }
     static class IssuedTokenOutInterceptor extends 
AbstractPhaseInterceptor<Message> {

Modified: 
cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/trust/STSClient.java
URL: 
http://svn.apache.org/viewvc/cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/trust/STSClient.java?rev=966762&r1=966761&r2=966762&view=diff
==============================================================================
--- 
cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/trust/STSClient.java
 (original)
+++ 
cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/trust/STSClient.java
 Thu Jul 22 17:19:34 2010
@@ -21,6 +21,7 @@ package org.apache.cxf.ws.security.trust
 
 import java.io.IOException;
 import java.io.InputStream;
+import java.io.StringReader;
 import java.net.URL;
 import java.security.PublicKey;
 import java.security.cert.X509Certificate;
@@ -140,6 +141,8 @@ public class STSClient implements Config
 
     boolean isSecureConv;
     int ttl = 300;
+    
+    Object actAs;
 
     Map<String, Object> ctx = new HashMap<String, Object>();
     
@@ -273,6 +276,11 @@ public class STSClient implements Config
     public void setEndpointQName(QName qn) {
         endpointName = qn;
     }
+    
+    public void setActAs(Object actAs) {
+        this.actAs = actAs;
+    }
+    
     public void setKeySize(int i) {
         keySize = i;
     }
@@ -456,6 +464,9 @@ public class STSClient implements Config
             StaxUtils.copy(el, writer);
             writer.writeEndElement();
         }
+        
+        addActAs(writer);
+        
         writer.writeEndElement();
 
         Object obj[] = client.invoke(boi, new 
DOMSource(writer.getDocument().getDocumentElement()));
@@ -703,6 +714,35 @@ public class STSClient implements Config
             writer.writeEndElement();
         }
     }
+    
+    private void addActAs(W3CDOMStreamWriter writer) throws Exception {
+        if (this.actAs != null) {
+            final boolean isString = this.actAs instanceof String;
+            final boolean isElement = this.actAs instanceof Element; 
+            if (isString || isElement) {
+                final Element actAsEl;
+                
+                if (isString) {
+                    final Document acAsDoc =
+                        DOMUtils.readXml(new StringReader((String) 
this.actAs));
+                    actAsEl = acAsDoc.getDocumentElement();
+                } else {
+                    actAsEl = (Element) this.actAs;
+                }
+                
+                writer.writeStartElement(STSUtils.WST_NS_08_02, "ActAs");
+                
+                // Unlikely to ever be otherwise, but still prudent to check.
+                if (actAsEl.getOwnerDocument() != writer.getDocument()) {
+                    writer.getDocument().adoptNode(actAsEl);
+                }
+                
+                writer.getCurrentNode().appendChild(actAsEl);
+                
+                writer.writeEndElement();
+            }
+        }
+    }
 
     private SecurityToken createSecurityToken(Element el, byte[] 
requestorEntropy)
         throws WSSecurityException {

Modified: 
cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/trust/STSUtils.java
URL: 
http://svn.apache.org/viewvc/cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/trust/STSUtils.java?rev=966762&r1=966761&r2=966762&view=diff
==============================================================================
--- 
cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/trust/STSUtils.java
 (original)
+++ 
cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/trust/STSUtils.java
 Thu Jul 22 17:19:34 2010
@@ -49,8 +49,14 @@ import org.apache.neethi.Policy;
  */
 public final class STSUtils {
     public static final String WST_NS_05_02 = 
"http://schemas.xmlsoap.org/ws/2005/02/trust";;
+    /**
+     * WS-T 1.3 Namespace
+     */
     public static final String WST_NS_05_12 = 
"http://docs.oasis-open.org/ws-sx/ws-trust/200512";;
-
+    /**
+     * WS-T 1.4 Namespace.
+     */
+    public static final String WST_NS_08_02 = 
"http://docs.oasis-open.org/ws-sx/ws-trust/200802";;
     public static final String SCT_NS_05_02 = 
"http://schemas.xmlsoap.org/ws/2005/02/sc";;
     public static final String SCT_NS_05_12 
         = "http://docs.oasis-open.org/ws-sx/ws-secureconversation/200512";;


Reply via email to