Missing SOAP header in ECP response

Mitu Singh mitusingh27 at yahoo.com
Thu Dec 13 13:32:34 EST 2012


Brent, I will try to implement the workaround that you have suggested. It would be great if you send an update when this issue is resolved.

And thanks for the help on how to set up the debugging for the protocol message. I will try that too.

Thanks!




________________________________
 From: Brent Putman <putmanb at georgetown.edu>
To: dev at shibboleth.net 
Sent: Wednesday, December 12, 2012 9:06 PM
Subject: Re: Missing SOAP header in ECP response
 




On 12/12/12 6:13 PM, Mitu Singh wrote:

Thanks Brent. It would be great help if you could look into the code to see if I need to change something. 
>
Ok, I think I know what the issue is.  The problem isn't the code
    that's constructing the Envelope, etc, it's the encoder that you are
    using.  The SAML 2 binding version of HTTPSOAP11Encoder (meaning
    org.opensaml.saml2.binding.encoding.HTTPSOAP11Encoder) essentially
    doesn't currently allow using SOAP headers, because it
    indiscriminately ignores any SOAP Envelope that you set in the
    message context and instead builds its own.  IIRC someone else
    pointed this out once and I actually thought we had fixed that, but
    apparently not.  I'll look at doing that.

In the meantime, just try switching to the java-openws impl of
    HTTPSOAP11Encoder which is
    org.opensaml.ws.soap.soap11.encoder.http.HTTPSOAP11Encoder.  It
    respects the presence of a pre-existing SOAP Envelope in the message
    context's outbound message slot.  I believe the only functional
    difference between them for your purposes is going to be that the
    SAML version sets the HTTP SOAPAction header to "http://www.oasis-open.org/committees/security", which is a MAY in the SAML 2 bindings spec.  The openws one sets it to an empty string, unless there is a WS-Addressing Action header set on the Envelope, in which case it pulls the action value from that.

In terms of code compatibility, the main difference is going to be
    that the openws one does not implement the SAMLMessageEncoder
    interface, so it doesn't expose the binding URI.

If either or both of those things is important for your purposes,
    you could just trivially subclass the openws one and make it do
    those 2 things. 

The biggest difference is that the openws is an impl of
    HandlerChainAware, which is a concept that was introduced after the
    SAML ones in java-opensaml2 were written.  They were never
    backported to support that stuff, and probably won't be.



>Also, before the message is sent I would like to output the
        message (envelope with header,body and the saml response) to the
        console. How can I achieve this? I can output just the saml
        response using:
>         ResponseMarshaller marshaller = new ResponseMarshaller();
>        Element plaintextElement =
        marshaller.marshall(samlResponse);
>        String responseString =
        XMLHelper.nodeToString(plaintextElement);
>        System.out.println("SAML response: " + responseString);
>
>Can I do something similar to output the entire message?
>

Yes, the message encoder and decoder impls already have this support
    built-in via special logging categories.  Just turn on DEBUG level
    logging for Logger with name "PROTOCOL_MESSAGE" and you will get
    whatever is in the message context as the outbound or inbound
    message respectively.  To get logging to the console or anywhere
    else you want, you just need to supply you desired logging impl of
    SLF4J (e.g logback or one of the slf4j-to-whatever adapters) and the
    appropriate configuration.

 



--
To unsubscribe from this list send an email to dev-unsubscribe at shibboleth.net
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://shibboleth.net/pipermail/dev/attachments/20121213/2f98c388/attachment.html 


More information about the dev mailing list