The Source for Java Technology Collaboration
User: Password:



Kumar Jayanti's Blog

December 2007 Archives


Accessing the SAML Assertion in the WebService

Posted by kumarjayanti on December 07, 2007 at 01:01 AM | Permalink | Comments (8)

A Question that is often asked is, I am  Using  a WSIT Secure Scenario containing SAML Assertion, How do i access the SAML Assertion ?

Here is how you can access the SAML Assertion inside your WebService Endpoint Implementation Class. Note the method getSAMLAssertion() in particular.



package test;

import com.sun.xml.wss.SubjectAccessor;
import com.sun.xml.wss.XWSSecurityException;
import com.sun.xml.wss.impl.XWSSecurityRuntimeException;
import com.sun.xml.wss.saml.util.SAMLUtil;
import java.util.Set;
import javax.annotation.Resource;
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;
import javax.security.auth.Subject;
import javax.xml.stream.XMLStreamException;
import org.w3c.dom.Node;
import javax.xml.stream.XMLStreamReader;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import javax.xml.ws.WebServiceContext;
import org.w3c.dom.Element;

@WebService()
public class NewWebService {

    @Resource
    private WebServiceContext context;

    @WebMethod(operationName = "operation")
    public String operation(
           
            @WebParam(name = "parameter") String parameter) {
        System.out.println("Hello " + parameter);
        //get the Assertion from the Context
        Element samlAssertion = getSAMLAssertion(context);
        //dump the assertion to STDOUT
        try {
            dumpDomNode(samlAssertion);
        } catch ( TransformerException ex) {
            System.out.println("Error Dumping SAML Assertion");
        }
        return "Hello " + parameter;
    }

    private static Element getSAMLAssertion(WebServiceContext context) {
        try {
            Subject subj = SubjectAccessor.getRequesterSubject(context);
            Set<Object> set = subj.getPublicCredentials();
            Element samlAssertion = null;
            for (Object obj : set) {
                if (obj instanceof XMLStreamReader) {
                    XMLStreamReader reader = (XMLStreamReader) obj;
                    //To create a DOM Element representing the Assertion :
                    samlAssertion = SAMLUtil.createSAMLAssertion(reader);
                    return samlAssertion;
                }
            }
        } catch (XMLStreamException ex) {
            //TODO:Add custom error handling logic
            throw new XWSSecurityRuntimeException(ex);
        } catch (XWSSecurityException ex) {
            //TODO:Add custom error handling logic
            throw new XWSSecurityRuntimeException(ex);
        }
        return null;
    }

    private static void dumpDomNode(Node node) throws TransformerException {
        System.out.println("==== DebugUtil.dumpDomNode(...) Start ====");
        DOMSource domSource = new DOMSource(node);
        TransformerFactory tf = TransformerFactory.newInstance();
        Transformer xform = null;
        xform = tf.newTransformer();
        xform.transform(domSource, new StreamResult(System.out));
        System.out.println();
        System.out.println("==== DebugUtil.dumpDomNode(...) End ====");
    }
}




Securing Metro WebServices Using Kerberos Tokens

Posted by kumarjayanti on December 06, 2007 at 08:12 AM | Permalink | Comments (0)

My Colleague Ashutosh has posted a nice blog on how to secure Metro WebServices using Kerberos Tokens.

http://blogs.sun.com/ashutosh/entry/running_kerberos_token_profile_scenario

Support for Kerberos Token Profile  would be available in Metro 1.1 release (to be out soon).  If you want to try it right away then you can do so by downloading the latest nigtly  here.

The Metro Kerberos Implementation was tested  for interoperability with .NET implementation last month.




Powered by
Movable Type 3.01D
 Feed java.net RSS Feeds