Author: muthulee
Date: Thu Jul 26 04:04:00 2007
New Revision: 559780
URL: http://svn.apache.org/viewvc?view=rev&rev=559780
Log:
SAML improvements
Added:
webservices/rampart/trunk/java/modules/rampart-trust/src/main/java/org/apache/rahas/impl/util/
webservices/rampart/trunk/java/modules/rampart-trust/src/main/java/org/apache/rahas/impl/util/SAMLAttributeCallback.java
webservices/rampart/trunk/java/modules/rampart-trust/src/main/java/org/apache/rahas/impl/util/SAMLCallback.java
webservices/rampart/trunk/java/modules/rampart-trust/src/main/java/org/apache/rahas/impl/util/SAMLCallbackHandler.java
webservices/rampart/trunk/java/modules/rampart-trust/src/main/java/org/apache/rahas/impl/util/SAMLNameIdentifierCallback.java
Modified:
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/MessageBuilder.java
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/RampartEngine.java
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/util/MessageOptimizer.java
webservices/rampart/trunk/java/modules/rampart-trust/src/main/java/org/apache/rahas/impl/SAMLTokenIssuer.java
webservices/rampart/trunk/java/modules/rampart-trust/src/main/java/org/apache/rahas/impl/SAMLTokenIssuerConfig.java
webservices/rampart/trunk/java/src/site/resources/download/1.2/download.html
Modified:
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/MessageBuilder.java
URL:
http://svn.apache.org/viewvc/webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/MessageBuilder.java?view=diff&rev=559780&r1=559779&r2=559780
==============================================================================
---
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/MessageBuilder.java
(original)
+++
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/MessageBuilder.java
Thu Jul 26 04:04:00 2007
@@ -137,7 +137,9 @@
if(rpd.isMTOMSerialize()){
msgCtx.setProperty(Constants.Configuration.ENABLE_MTOM,
Constants.VALUE_TRUE);
OptimizePartsConfig config= rpd.getOptimizePartsConfig();
- MessageOptimizer.optimize(msgCtx.getEnvelope(),
config.getExpressions(), config.getNamespaces());
+ if(config != null){
+ MessageOptimizer.optimize(msgCtx.getEnvelope(),
config.getExpressions(), config.getNamespaces());
+ }
}
}
Modified:
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/RampartEngine.java
URL:
http://svn.apache.org/viewvc/webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/RampartEngine.java?view=diff&rev=559780&r1=559779&r2=559780
==============================================================================
---
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/RampartEngine.java
(original)
+++
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/RampartEngine.java
Thu Jul 26 04:04:00 2007
@@ -48,7 +48,7 @@
public class RampartEngine {
- private static Log log =
LogFactory.getLog(RampartEngine.class.getName());
+ private static Log log = LogFactory.getLog(RampartEngine.class);
private static Log tlog = LogFactory.getLog(RampartConstants.TIME_LOG);
public Vector process(MessageContext msgCtx) throws WSSPolicyException,
Modified:
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/util/MessageOptimizer.java
URL:
http://svn.apache.org/viewvc/webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/util/MessageOptimizer.java?view=diff&rev=559780&r1=559779&r2=559780
==============================================================================
---
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/util/MessageOptimizer.java
(original)
+++
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/util/MessageOptimizer.java
Thu Jul 26 04:04:00 2007
@@ -56,7 +56,6 @@
}
try {
- if(expressions.size() > 0){
for(int i=0; i<expressions.size(); i++){
String exp = (String)expressions.get(i);
XPath xp = new AXIOMXPath(exp);
@@ -69,18 +68,6 @@
text.setOptimize(true);
}
}
- }else{
- String exp = CIPHER_ELEMENT;
- XPath xp = new AXIOMXPath(exp);
- xp.setNamespaceContext(nsCtx);
- List list = xp.selectNodes(env);
- Iterator elements = list.iterator();
- while (elements.hasNext()) {
- OMElement element = (OMElement)
elements.next();
- OMText text =
(OMText)element.getFirstOMChild();
- text.setOptimize(true);
- }
- }
} catch (JaxenException e) {
throw new RampartException("Error in XPath ", e);
}
Modified:
webservices/rampart/trunk/java/modules/rampart-trust/src/main/java/org/apache/rahas/impl/SAMLTokenIssuer.java
URL:
http://svn.apache.org/viewvc/webservices/rampart/trunk/java/modules/rampart-trust/src/main/java/org/apache/rahas/impl/SAMLTokenIssuer.java?view=diff&rev=559780&r1=559779&r2=559780
==============================================================================
---
webservices/rampart/trunk/java/modules/rampart-trust/src/main/java/org/apache/rahas/impl/SAMLTokenIssuer.java
(original)
+++
webservices/rampart/trunk/java/modules/rampart-trust/src/main/java/org/apache/rahas/impl/SAMLTokenIssuer.java
Thu Jul 26 04:04:00 2007
@@ -16,6 +16,13 @@
package org.apache.rahas.impl;
+import java.security.Principal;
+import java.security.SecureRandom;
+import java.security.cert.X509Certificate;
+import java.text.DateFormat;
+import java.util.Arrays;
+import java.util.Date;
+
import org.apache.axiom.om.OMElement;
import org.apache.axiom.om.OMNode;
import org.apache.axiom.om.impl.dom.jaxp.DocumentBuilderFactoryImpl;
@@ -28,6 +35,9 @@
import org.apache.rahas.TokenIssuer;
import org.apache.rahas.TrustException;
import org.apache.rahas.TrustUtil;
+import org.apache.rahas.impl.util.SAMLAttributeCallback;
+import org.apache.rahas.impl.util.SAMLCallbackHandler;
+import org.apache.rahas.impl.util.SAMLNameIdentifierCallback;
import org.apache.ws.security.WSConstants;
import org.apache.ws.security.WSSecurityException;
import org.apache.ws.security.WSUsernameTokenPrincipal;
@@ -51,13 +61,6 @@
import org.w3c.dom.Node;
import org.w3c.dom.Text;
-import java.security.Principal;
-import java.security.SecureRandom;
-import java.security.cert.X509Certificate;
-import java.text.DateFormat;
-import java.util.Arrays;
-import java.util.Date;
-
/**
* Issuer to issue SAMl tokens
*/
@@ -251,10 +254,19 @@
Principal principal = data.getPrincipal();
// In the case where the principal is a UT
if (principal instanceof WSUsernameTokenPrincipal) {
- // TODO: Find the email address
- String subjectNameId = "[EMAIL PROTECTED]";
- SAMLNameIdentifier nameId = new SAMLNameIdentifier(
- subjectNameId, null, SAMLNameIdentifier.FORMAT_EMAIL);
+ SAMLNameIdentifier nameId = null;
+ if(config.getCallbackHander() != null){
+ SAMLNameIdentifierCallback cb = new
SAMLNameIdentifierCallback(data);
+ cb.setUserId(principal.getName());
+ SAMLCallbackHandler callbackHandler =
config.getCallbackHander();
+ callbackHandler.handle(cb);
+ nameId = cb.getNameId();
+ }else{
+ //TODO Remove
+ nameId = new SAMLNameIdentifier(
+ principal.getName(), null,
SAMLNameIdentifier.FORMAT_EMAIL);
+ }
+
return createAuthAssertion(doc, SAMLSubject.CONF_BEARER,
nameId, null, config, crypto, creationTime,
expirationTime);
@@ -321,11 +333,12 @@
new String[] { serviceCert.getSubjectDN().getName() },
e);
}
- return this.createAttributeAssertion(doc, encryptedKeyElem, config,
+ return this.createAttributeAssertion(doc, data ,encryptedKeyElem,
config,
crypto, creationTime, expirationTime);
} else {
try {
String subjectNameId = data.getPrincipal().getName();
+
SAMLNameIdentifier nameId = new SAMLNameIdentifier(
subjectNameId, null, SAMLNameIdentifier.FORMAT_EMAIL);
@@ -404,7 +417,7 @@
* @return
* @throws TrustException
*/
- private SAMLAssertion createAttributeAssertion(Document doc,
+ private SAMLAssertion createAttributeAssertion(Document doc, RahasData
data,
Element keyInfoContent, SAMLTokenIssuerConfig config,
Crypto crypto, Date notBefore, Date notAfter) throws
TrustException {
try {
@@ -422,11 +435,22 @@
SAMLSubject subject = new SAMLSubject(null, Arrays
.asList(confirmationMethods), null, keyInfoElem);
- SAMLAttribute attribute = new SAMLAttribute("Name",
- "https://rahas.apache.org/saml/attrns", null, -1, Arrays
- .asList(new String[] { "Colombo/Rahas" }));
+
+ SAMLAttribute[] attrs = null;
+ if(config.getCallbackHander() != null){
+ SAMLAttributeCallback cb = new SAMLAttributeCallback(data);
+ SAMLCallbackHandler handler = config.getCallbackHander();
+ attrs = cb.getAttributes();
+ }else{
+ //TODO Remove this after discussing
+ SAMLAttribute attribute = new SAMLAttribute("Name",
+ "https://rahas.apache.org/saml/attrns", null, -1,
Arrays
+ .asList(new String[] { "Colombo/Rahas" }));
+ attrs = new SAMLAttribute[]{attribute};
+ }
+
SAMLAttributeStatement attrStmt = new SAMLAttributeStatement(
- subject, Arrays.asList(new SAMLAttribute[] { attribute }));
+ subject, Arrays.asList(attrs ));
SAMLStatement[] statements = { attrStmt };
Modified:
webservices/rampart/trunk/java/modules/rampart-trust/src/main/java/org/apache/rahas/impl/SAMLTokenIssuerConfig.java
URL:
http://svn.apache.org/viewvc/webservices/rampart/trunk/java/modules/rampart-trust/src/main/java/org/apache/rahas/impl/SAMLTokenIssuerConfig.java?view=diff&rev=559780&r1=559779&r2=559780
==============================================================================
---
webservices/rampart/trunk/java/modules/rampart-trust/src/main/java/org/apache/rahas/impl/SAMLTokenIssuerConfig.java
(original)
+++
webservices/rampart/trunk/java/modules/rampart-trust/src/main/java/org/apache/rahas/impl/SAMLTokenIssuerConfig.java
Thu Jul 26 04:04:00 2007
@@ -16,22 +16,25 @@
package org.apache.rahas.impl;
+import java.io.FileInputStream;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Properties;
+
+import javax.xml.namespace.QName;
+
import org.apache.axiom.om.OMAbstractFactory;
import org.apache.axiom.om.OMAttribute;
import org.apache.axiom.om.OMElement;
import org.apache.axiom.om.OMFactory;
import org.apache.axiom.om.impl.builder.StAXOMBuilder;
import org.apache.axis2.description.Parameter;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
import org.apache.rahas.TrustException;
-
-import javax.xml.namespace.QName;
-
-import java.io.FileInputStream;
-import java.util.Enumeration;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.Properties;
+import org.apache.rahas.impl.util.SAMLCallbackHandler;
/**
* Configuration manager for the <code>SAMLTokenIssuer</code>
@@ -40,6 +43,9 @@
*/
public class SAMLTokenIssuerConfig extends AbstractIssuerConfig {
+
+ Log log = LogFactory.getLog(SAMLTokenIssuerConfig.class);
+
/**
* The QName of the configuration element of the SAMLTokenIssuer
*/
@@ -76,13 +82,16 @@
public final static QName USE_SAML_ATTRIBUTE_STATEMENT = new
QName("useSAMLAttributeStatement");
public final static QName ISSUER_NAME = new QName("issuerName");
-
+
+ public final static QName SAML_CALLBACK_CLASS = new
QName("dataCallbackHandlerClass");
+
protected String issuerKeyAlias;
protected String issuerKeyPassword;
protected String issuerName;
protected Map trustedServices = new HashMap();
protected String trustStorePropFile;
-
+ protected SAMLCallbackHandler callbackHander;
+
/**
* Create a new configuration with issuer name and crypto information
* @param issuerName Name of the issuer
@@ -228,6 +237,27 @@
//throw an exception when there are no trusted in the list at the
//moment
}
+
+
+ OMElement attrElemet =
elem.getFirstChildWithName(SAML_CALLBACK_CLASS);
+ if (attrElemet != null) {
+ try {
+ String value = attrElemet.getText();
+ Class handlerClass =
Class.forName(value);
+ this.callbackHander =
(SAMLCallbackHandler)handlerClass.newInstance();
+ } catch (ClassNotFoundException e) {
+ log.debug("Error loading class" , e);
+ throw new TrustException("Error loading
class" , e);
+ } catch (InstantiationException e) {
+ log.debug("Error instantiating class" ,
e);
+ throw new TrustException("Error
instantiating class" , e);
+ } catch (IllegalAccessException e) {
+ log.debug("Illegal Access" , e);
+ throw new TrustException("Illegal
Access" , e);
+ }
+ }
+
+
}
/**
@@ -349,5 +379,15 @@
public Map getTrustedServices() {
return trustedServices;
}
+
+ public SAMLCallbackHandler getCallbackHander() {
+ return callbackHander;
+ }
+
+ public void setCallbackHander(SAMLCallbackHandler callbackHander) {
+ this.callbackHander = callbackHander;
+ }
+
+
}
Added:
webservices/rampart/trunk/java/modules/rampart-trust/src/main/java/org/apache/rahas/impl/util/SAMLAttributeCallback.java
URL:
http://svn.apache.org/viewvc/webservices/rampart/trunk/java/modules/rampart-trust/src/main/java/org/apache/rahas/impl/util/SAMLAttributeCallback.java?view=auto&rev=559780
==============================================================================
---
webservices/rampart/trunk/java/modules/rampart-trust/src/main/java/org/apache/rahas/impl/util/SAMLAttributeCallback.java
(added)
+++
webservices/rampart/trunk/java/modules/rampart-trust/src/main/java/org/apache/rahas/impl/util/SAMLAttributeCallback.java
Thu Jul 26 04:04:00 2007
@@ -0,0 +1,33 @@
+package org.apache.rahas.impl.util;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.rahas.RahasData;
+import org.opensaml.SAMLAttribute;
+
+public class SAMLAttributeCallback implements SAMLCallback{
+
+ private List attributes = null;
+ private RahasData data = null;
+
+ public SAMLAttributeCallback(RahasData data){
+ attributes = new ArrayList();
+ this.data = data;
+ }
+
+ public int getCallbackType(){
+ return SAMLCallback.ATTR_CALLBACK;
+ }
+
+ public void addAttributes(SAMLAttribute attribute){
+ attributes.add(attribute);
+ }
+
+ public SAMLAttribute[] getAttributes(){
+ return (SAMLAttribute[])attributes.toArray(new
SAMLAttribute[attributes.size()]);
+
+ }
+
+
+}
Added:
webservices/rampart/trunk/java/modules/rampart-trust/src/main/java/org/apache/rahas/impl/util/SAMLCallback.java
URL:
http://svn.apache.org/viewvc/webservices/rampart/trunk/java/modules/rampart-trust/src/main/java/org/apache/rahas/impl/util/SAMLCallback.java?view=auto&rev=559780
==============================================================================
---
webservices/rampart/trunk/java/modules/rampart-trust/src/main/java/org/apache/rahas/impl/util/SAMLCallback.java
(added)
+++
webservices/rampart/trunk/java/modules/rampart-trust/src/main/java/org/apache/rahas/impl/util/SAMLCallback.java
Thu Jul 26 04:04:00 2007
@@ -0,0 +1,17 @@
+package org.apache.rahas.impl.util;
+
+public interface SAMLCallback {
+
+ /**
+ * Attribute callback
+ */
+ public static final int ATTR_CALLBACK = 1;
+
+ /**
+ * Subject name identifier
+ */
+ public static final int NAME_IDENTIFIER_CALLBACK = 2;
+
+ int getCallbackType();
+
+}
Added:
webservices/rampart/trunk/java/modules/rampart-trust/src/main/java/org/apache/rahas/impl/util/SAMLCallbackHandler.java
URL:
http://svn.apache.org/viewvc/webservices/rampart/trunk/java/modules/rampart-trust/src/main/java/org/apache/rahas/impl/util/SAMLCallbackHandler.java?view=auto&rev=559780
==============================================================================
---
webservices/rampart/trunk/java/modules/rampart-trust/src/main/java/org/apache/rahas/impl/util/SAMLCallbackHandler.java
(added)
+++
webservices/rampart/trunk/java/modules/rampart-trust/src/main/java/org/apache/rahas/impl/util/SAMLCallbackHandler.java
Thu Jul 26 04:04:00 2007
@@ -0,0 +1,9 @@
+package org.apache.rahas.impl.util;
+
+import org.opensaml.SAMLException;
+
+public interface SAMLCallbackHandler {
+
+ public void handle(SAMLCallback callback) throws SAMLException;
+
+}
Added:
webservices/rampart/trunk/java/modules/rampart-trust/src/main/java/org/apache/rahas/impl/util/SAMLNameIdentifierCallback.java
URL:
http://svn.apache.org/viewvc/webservices/rampart/trunk/java/modules/rampart-trust/src/main/java/org/apache/rahas/impl/util/SAMLNameIdentifierCallback.java?view=auto&rev=559780
==============================================================================
---
webservices/rampart/trunk/java/modules/rampart-trust/src/main/java/org/apache/rahas/impl/util/SAMLNameIdentifierCallback.java
(added)
+++
webservices/rampart/trunk/java/modules/rampart-trust/src/main/java/org/apache/rahas/impl/util/SAMLNameIdentifierCallback.java
Thu Jul 26 04:04:00 2007
@@ -0,0 +1,36 @@
+package org.apache.rahas.impl.util;
+
+import org.apache.rahas.RahasData;
+import org.opensaml.SAMLNameIdentifier;
+
+public class SAMLNameIdentifierCallback implements SAMLCallback{
+
+ private SAMLNameIdentifier nameId = null;
+ private String userId = null;
+ private RahasData data = null;
+
+ public SAMLNameIdentifierCallback(RahasData data){
+ this.data = data;
+ }
+
+ public int getCallbackType(){
+ return SAMLCallback.NAME_IDENTIFIER_CALLBACK;
+ }
+
+ public SAMLNameIdentifier getNameId() {
+ return nameId;
+ }
+
+ public void setNameId(SAMLNameIdentifier nameId) {
+ this.nameId = nameId;
+ }
+
+ public void setUserId(String userId) {
+ this.userId = userId;
+ }
+
+ public String getUserId() {
+ return userId;
+ }
+
+}
Modified:
webservices/rampart/trunk/java/src/site/resources/download/1.2/download.html
URL:
http://svn.apache.org/viewvc/webservices/rampart/trunk/java/src/site/resources/download/1.2/download.html?view=diff&rev=559780&r1=559779&r2=559780
==============================================================================
---
webservices/rampart/trunk/java/src/site/resources/download/1.2/download.html
(original)
+++
webservices/rampart/trunk/java/src/site/resources/download/1.2/download.html
Thu Jul 26 04:04:00 2007
@@ -109,8 +109,8 @@
as well.</td>
<td>
<a
-href="[preferred]/ws/rampart/1_2/rampart-docs-1.2.zip"
-title="[preferred]/ws/rampart/1_2/rampart-docs-1.2.zip">zip</a>
+href="[preferred]/ws/rampart/1_2/rampart-1.2.zip"
+title="[preferred]/ws/rampart/1_2/rampart-1.2.zip">zip</a>
<a
href="http://www.apache.org/dist/ws/rampart/1_2/rampart-1.2.zip.md5"
class="externalLink"
@@ -128,8 +128,8 @@
install' followed by 'mvn assembly:assembly -Drelease'</td>
<td>
<a
-href="[preferred]/ws/rampart/1_2/rampart-docs-1.2.zip"
-title="[preferred]/ws/rampart/1_2/rampart-docs-1.2.zip">zip</a>
+href="[preferred]/ws/rampart/1_2/rampart-src-1.2.zip"
+title="[preferred]/ws/rampart/1_2/rampart-src-1.2.zip">zip</a>
<a
href="http://www.apache.org/dist/ws/rampart/1_2/rampart-src-1.2.zip.md5"
class="externalLink"