<html><body><div style="color:#000; background-color:#fff; font-family:tahoma, new york, times, serif;font-size:10pt">All,<br> <div style="font-family: tahoma, new york, times, serif; font-size: 10pt;"><div style="font-family: times new roman, new york, times, serif; font-size: 12pt;"><div id="yiv382733"><div><div style="color:#000;background-color:#fff;font-family:tahoma, new york, times, serif;font-size:10pt;">  

<div class="yiv382733MsoNormal">I have a question about the <span class="yiv382733yshortcuts yiv382733cs4-visible" id="yiv382733lw_1355273664_0">ECP</span> Profile implementation. I
can send a saml response to the ECP Client. This is how my response looks like:</div>



<div class="yiv382733MsoNormal">&lt;?xml version="1.0"
encoding="UTF-8"?&gt;</div>

<div class="yiv382733MsoNormal">&lt;soap11:Envelope xmlns:soap11="<a rel="nofollow" target="_blank" href="http://schemas.xmlsoap.org/soap/envelope/"><span class="yiv382733" id="yiv382733lw_1355273664_1">http://schemas.xmlsoap.org/soap/envelope/</span></a>"&gt;</div>

<div class="yiv382733MsoNormal">&nbsp; &lt;soap11:Body&gt;</div>

<div class="yiv382733MsoNormal">&nbsp;&nbsp;&nbsp;&nbsp; &lt;saml2p:Response……</div>

<div class="yiv382733MsoNormal">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&lt;saml2:Assertion……</div>

<div class="yiv382733MsoNormal">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&lt;/saml2:Assertion&gt;</div>

<div class="yiv382733MsoNormal">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/saml2p:Response&gt;</div>

<div class="yiv382733MsoNormal">&nbsp;&nbsp;&nbsp; &lt;/soap11:Body&gt;</div>

<div class="yiv382733MsoNormal">&lt;/soap11:Envelope&gt;</div>

<div class="yiv382733MsoNormal">&nbsp;</div>

<div class="yiv382733MsoNormal">The response is missing the soap header element and the
ecp:Response element. The response should look like :</div>



<div class="yiv382733MsoNormal">&lt;SOAP-ENV:Envelope</div>

<div class="yiv382733MsoNormal">xmlns:ecp="urn:oasis:names:tc:SAML:2.0:profiles:SSO:ecp"</div>

<div class="yiv382733MsoNormal">xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol"</div>

<div class="yiv382733MsoNormal">xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"&gt;</div>

<div class="yiv382733MsoNormal">&lt;SOAP-ENV:Header&gt;</div>

<div class="yiv382733MsoNormal">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&lt;ecp:Response SOAP-ENV:mustUnderstand="1" </div>

<div class="yiv382733MsoNormal">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SOAP-ENV:actor="<a rel="nofollow" target="_blank" href="http://schemas.xmlsoap.org/soap/actor/next"><span class="yiv382733" id="yiv382733lw_1355273664_2">http://schemas.xmlsoap.org/soap/actor/next</span></a>"</div>

<div class="yiv382733MsoNormal">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
AssertionConsumerServiceURL="<a rel="nofollow" target="_blank" href="https://serviceprovider.example.com/ecp_assertion_consumer">https://ServiceProvider.example.com/ecp_assertion_consumer</a>"/&gt;</div>

<div class="yiv382733MsoNormal">&lt;/SOAP-ENV:Header&gt;</div>

<div class="yiv382733MsoNormal">&lt;SOAP-ENV:Body&gt;</div>

<div class="yiv382733MsoNormal">&lt;samlp:Response&gt; ... &lt;/samlp:Response&gt;</div>

<div class="yiv382733MsoNormal">&lt;/SOAP-ENV:Body&gt;</div>

<div class="yiv382733MsoNormal">&lt;/SOAP-ENV:Envelope&gt;</div>

<div class="yiv382733MsoNormal">&nbsp;</div>

<div class="yiv382733MsoNormal">I have tried a number of ways to include the header, but it
is not being set. This is how I have done it:<span class="yiv382733tab">&nbsp;&nbsp;&nbsp; </span><span class="yiv382733tab">&nbsp;&nbsp;&nbsp; </span><span class="yiv382733tab">&nbsp;&nbsp;&nbsp; </span><span class="yiv382733tab">&nbsp;&nbsp; </span>

<div class="yiv382733MsoNormal"><span class="yiv382733tab">&nbsp;&nbsp;&nbsp; </span><span class="yiv382733tab">&nbsp;&nbsp;&nbsp; </span><span class="yiv382733tab">&nbsp;&nbsp;&nbsp; </span><span class="yiv382733tab">&nbsp;&nbsp;&nbsp; </span><span class="yiv382733tab">&nbsp;&nbsp;&nbsp; </span><span style="color:#4F81BD;">HttpServletResponseAdapter
outTransport = new HttpServletResponseAdapter(httpResponse, false);</span>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br></div></div>

<div class="yiv382733MsoNormal" style="margin-left:.5in;text-indent:.5in;"><u><span style="font-size:10.0pt;font-family:Consolas;color:#4F81BD;">BasicSAMLMessageContext</span></u><span style="font-size:10.0pt;font-family:Consolas;color:#4F81BD;"> messageContext = <b>new</b>
<u>BasicSAMLMessageContext</u>();</span><span style="font-size:10.0pt;font-family:Consolas;color:#4F81BD;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>

</div><div class="yiv382733MsoNormal" style=""><span style="font-size:10.0pt;font-family:Consolas;color:#4F81BD;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
messageContext.setOutboundMessageTransport(outTransport);</span><span style="font-size:10.0pt;font-family:Consolas;color:#4F81BD;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>

</div><div class="yiv382733MsoNormal" style=""><span style="font-size:10.0pt;font-family:Consolas;color:#4F81BD;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
SOAPObjectBuilder&lt;Envelope&gt; envelopeBuilder =
(SOAPObjectBuilder&lt;Envelope&gt;) builderFactory.getBuilder(Envelope.DEFAULT_ELEMENT_NAME);</span></div>

<div class="yiv382733MsoNormal" style=""><span style="font-size:10.0pt;font-family:Consolas;color:#4F81BD;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
Envelope envelope =
envelopeBuilder.buildObject();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></div><span style="font-size:10.0pt;font-family:Consolas;color:#4F81BD;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>

<div class="yiv382733MsoNormal" style=""><span style="font-size:10.0pt;font-family:Consolas;color:#4F81BD;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;messageContext.setOutboundMessage(envelope);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></div>

<div class="yiv382733MsoNormal" style=""><span style="font-size:10.0pt;font-family:Consolas;color:#4F81BD;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;messageContext.setOutboundSAMLMessage(authResponse);</span><span style="font-size:10.0pt;font-family:Consolas;color:#4F81BD;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>

</div><div class="yiv382733MsoNormal" style=""><span style="font-size:10.0pt;font-family:Consolas;color:#4F81BD;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
SAMLObjectBuilder&lt;org.opensaml.saml2.ecp.Response&gt; ecpResponseBuilder =
(SAMLObjectBuilder&lt;org.opensaml.saml2.ecp.Response&gt;)
builderFactory.getBuilder(org.opensaml.saml2.ecp.Response.DEFAULT_ELEMENT_NAME);</span></div>

<div class="yiv382733MsoNormal" style=""><span style="font-size:10.0pt;font-family:Consolas;color:#4F81BD;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
org.opensaml.saml2.ecp.Response ecpResponse = ecpResponseBuilder.buildObject();</span></div><div class="yiv382733MsoNormal" style=""><span style="font-size:10.0pt;font-family:Consolas;color:#4F81BD;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
ecpResponse.setSOAP11MustUnderstand(true);</span></div>

<div class="yiv382733MsoNormal" style=""><span style="font-size:10.0pt;font-family:Consolas;color:#4F81BD;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
ecpResponse.setSOAP11Actor(org.opensaml.saml2.ecp.Response.SOAP11_ACTOR_NEXT);</span></div>

<div class="yiv382733MsoNormal" style=""><span style="font-size:10.0pt;font-family:Consolas;color:#4F81BD;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
ecpResponse.setAssertionConsumerServiceURL("<a rel="nofollow" target="_blank"  href="https://localhost:8443/spring-security-saml2-sample">https://localhost:8443/sp_URL</a>");&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></div>

<div class="yiv382733MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;color:#4F81BD;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
SOAPHelper.addHeaderBlock(messageContext, ecpResponse);</span></div>

<div class="yiv382733MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;color:#4F81BD;">&nbsp;</span></div>

<div class="yiv382733MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;">And
another way:</span></div>

<div class="yiv382733MsoNormal" style="text-indent:.5in;"><span style="font-size:10.0pt;font-family:Consolas;color:#953735;">SOAPObjectBuilder&lt;Envelope&gt;
envelopeBuilder = <u>(SOAPObjectBuilder&lt;Envelope&gt;)
builderFactory.getBuilder(Envelope.<i>DEFAULT_ELEMENT_NAME</i>)</u>;</span></div>

<div class="yiv382733MsoNormal" style=""><span style="font-size:10.0pt;font-family:Consolas;color:#953735;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
Envelope envelope =
envelopeBuilder.buildObject();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></div><span style="font-size:10.0pt;font-family:Consolas;color:#953735;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>

<div class="yiv382733MsoNormal" style=""><span style="font-size:10.0pt;font-family:Consolas;color:#953735;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SOAPObjectBuilder&lt;Header&gt;
headerBuilder = <u>(SOAPObjectBuilder&lt;Header&gt;)
builderFactory.getBuilder(Header.<i>DEFAULT_ELEMENT_NAME</i>)</u>;</span></div>

<div class="yiv382733MsoNormal" style=""><span style="font-size:10.0pt;font-family:Consolas;color:#953735;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
Header header = headerBuilder.buildObject();&nbsp; </span></div><span style="font-size:10.0pt;font-family:Consolas;color:#953735;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>

<div class="yiv382733MsoNormal" style=""><span style="font-size:10.0pt;font-family:Consolas;color:#953735;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SAMLObjectBuilder&lt;org.opensaml.saml2.ecp.Response&gt;
ecpResponseBuilder = <u>(SAMLObjectBuilder&lt;org.opensaml.saml2.ecp.Response&gt;)
builderFactory.getBuilder(org.opensaml.saml2.ecp.Response.<i>DEFAULT_ELEMENT_NAME</i>)</u>;</span></div>

<div class="yiv382733MsoNormal" style=""><span style="font-size:10.0pt;font-family:Consolas;color:#953735;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
org.opensaml.saml2.ecp.Response ecpResponse = ecpResponseBuilder.buildObject();</span></div>



<div class="yiv382733MsoNormal" style=""><span style="font-size:10.0pt;font-family:Consolas;color:#953735;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
ecpResponse.setSOAP11MustUnderstand(<b>true</b>);</span></div>

<div class="yiv382733MsoNormal" style=""><span style="font-size:10.0pt;font-family:Consolas;color:#953735;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
ecpResponse.setSOAP11Actor(org.opensaml.saml2.ecp.Response.<i>SOAP11_ACTOR_NEXT</i>);</span></div>

<div class="yiv382733MsoNormal" style=""><span style="font-size:10.0pt;font-family:Consolas;color:#953735;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
ecpResponse.setAssertionConsumerServiceURL("<a rel="nofollow" target="_blank"  href="https://localhost:8443/spring-security-saml2-sample">https://localhost:8443/sp</a>");</span><span style="font-size:10.0pt;font-family:Consolas;color:#953735;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>

</div><div class="yiv382733MsoNormal" style=""><span style="font-size:10.0pt;font-family:Consolas;color:#953735;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
header.getUnknownXMLObjects().add(ecpResponse);</span></div>

<div class="yiv382733MsoNormal" style=""><span style="font-size:10.0pt;font-family:Consolas;color:#953735;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
envelope.setHeader(header);</span><span style="font-size:10.0pt;font-family:Consolas;color:#953735;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>

</div><div class="yiv382733MsoNormal" style=""><span style="font-size:10.0pt;font-family:Consolas;color:#953735;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="background:yellow;">messageContext</span>.setOutboundMessage(envelope);</span></div>

<div class="yiv382733MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;color:#953735;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <u><span style="background:yellow;">messageContext</span>.setOutboundSAMLMessage(authResponse)</u>;&nbsp;&nbsp;&nbsp;
</span></div>

<div class="yiv382733MsoNormal"><span style="color:#4F81BD;">&nbsp;<br></span>This is how the message is encoded:<br>

<div class="yiv382733MsoNormal" style=""><span style="font-size:10.0pt;font-family:Consolas;color:#E46C0A;

">SAMLMessageEncoder encoder = <b>new</b> HTTPSOAP11Encoder();</span></div>

<span style="font-size:10.0pt;font-family:Consolas;
color:#E46C0A;


">encoder.encode(messageContext);<span style=""> </span></span><br></div>

<div class="yiv382733MsoNormal">&nbsp;</div>

Does anyone have pointers for adding the soap headers?<br><span style="font-size:10.0pt;font-family:Consolas;
color:#E46C0A;


"><span style=""><span style="color:rgb(0, 0, 0);">Is the above code the correct way to setup and send the response?<span></span></span><br></span></span></div></div></div><br> </div> </div>  </div></body></html>