<html><body><div style="color:#000; background-color:#fff; font-family:tahoma, new york, times, serif;font-size:10pt">All,<br><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="yiv213462049"><div><div style="color:#000;background-color:#fff;font-family:tahoma, new york, times, serif;font-size:10pt;"><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="yiv213462049"><div><div style="color:#000;background-color:#fff;font-family:tahoma, new york, times, serif;font-size:10pt;">
<div class="yiv213462049MsoNormal">I have a question about the <span class="yiv213462049yshortcuts yiv213462049cs4-visible" id="yiv213462049lw_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="yiv213462049MsoNormal"><?xml version="1.0"
encoding="UTF-8"?></div>
<div class="yiv213462049MsoNormal"><soap11:Envelope xmlns:soap11="<a rel="nofollow" target="_blank" href="http://schemas.xmlsoap.org/soap/envelope/"><span class="yiv213462049" id="yiv213462049lw_1355273664_1">http://schemas.xmlsoap.org/soap/envelope/</span></a>"></div>
<div class="yiv213462049MsoNormal"> <soap11:Body></div>
<div class="yiv213462049MsoNormal"> <saml2p:Response……</div>
<div class="yiv213462049MsoNormal">
<saml2:Assertion……</div>
<div class="yiv213462049MsoNormal">
</saml2:Assertion></div>
<div class="yiv213462049MsoNormal"> </saml2p:Response></div>
<div class="yiv213462049MsoNormal"> </soap11:Body></div>
<div class="yiv213462049MsoNormal"></soap11:Envelope></div>
<div class="yiv213462049MsoNormal"> </div>
<div class="yiv213462049MsoNormal">The response is missing the soap header element and the
ecp:Response element. The response should look like :</div>
<div class="yiv213462049MsoNormal"><SOAP-ENV:Envelope</div>
<div class="yiv213462049MsoNormal">xmlns:ecp="urn:oasis:names:tc:SAML:2.0:profiles:SSO:ecp"</div>
<div class="yiv213462049MsoNormal">xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol"</div>
<div class="yiv213462049MsoNormal">xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"></div>
<div class="yiv213462049MsoNormal"><SOAP-ENV:Header></div>
<div class="yiv213462049MsoNormal">
<ecp:Response SOAP-ENV:mustUnderstand="1" </div>
<div class="yiv213462049MsoNormal">
SOAP-ENV:actor="<a rel="nofollow" target="_blank" href="http://schemas.xmlsoap.org/soap/actor/next"><span class="yiv213462049" id="yiv213462049lw_1355273664_2">http://schemas.xmlsoap.org/soap/actor/next</span></a>"</div>
<div class="yiv213462049MsoNormal">
AssertionConsumerServiceURL="<a rel="nofollow" target="_blank" href="https://serviceprovider.example.com/ecp_assertion_consumer">https://ServiceProvider.example.com/ecp_assertion_consumer</a>"/></div>
<div class="yiv213462049MsoNormal"></SOAP-ENV:Header></div>
<div class="yiv213462049MsoNormal"><SOAP-ENV:Body></div>
<div class="yiv213462049MsoNormal"><samlp:Response> ... </samlp:Response></div>
<div class="yiv213462049MsoNormal"></SOAP-ENV:Body></div>
<div class="yiv213462049MsoNormal"></SOAP-ENV:Envelope></div>
<div class="yiv213462049MsoNormal"> </div>
<div class="yiv213462049MsoNormal">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="yiv213462049tab"> </span><span class="yiv213462049tab"> </span><span class="yiv213462049tab"> </span><span class="yiv213462049tab"> </span>
<div class="yiv213462049MsoNormal"><span class="yiv213462049tab"> </span><span class="yiv213462049tab"> </span><span class="yiv213462049tab"> </span><span class="yiv213462049tab"> </span><span class="yiv213462049tab"> </span><span style="color:#4F81BD;">HttpServletResponseAdapter
outTransport = new HttpServletResponseAdapter(httpResponse, false);</span> <br></div></div>
<div class="yiv213462049MsoNormal" 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;">
</span>
</div><div class="yiv213462049MsoNormal" style=""><span style="font-size:10.0pt;font-family:Consolas;color:#4F81BD;">
messageContext.setOutboundMessageTransport(outTransport);</span><span style="font-size:10.0pt;font-family:Consolas;color:#4F81BD;">
</span>
</div><div class="yiv213462049MsoNormal" style=""><span style="font-size:10.0pt;font-family:Consolas;color:#4F81BD;">
SOAPObjectBuilder<Envelope> envelopeBuilder =
(SOAPObjectBuilder<Envelope>) builderFactory.getBuilder(Envelope.DEFAULT_ELEMENT_NAME);</span></div>
<div class="yiv213462049MsoNormal" style=""><span style="font-size:10.0pt;font-family:Consolas;color:#4F81BD;">
Envelope envelope =
envelopeBuilder.buildObject(); </span></div><span style="font-size:10.0pt;font-family:Consolas;color:#4F81BD;"> </span>
<div class="yiv213462049MsoNormal" style=""><span style="font-size:10.0pt;font-family:Consolas;color:#4F81BD;"> messageContext.setOutboundMessage(envelope);
</span></div>
<div class="yiv213462049MsoNormal" style=""><span style="font-size:10.0pt;font-family:Consolas;color:#4F81BD;"> messageContext.setOutboundSAMLMessage(authResponse);</span><span style="font-size:10.0pt;font-family:Consolas;color:#4F81BD;">
</span>
</div><div class="yiv213462049MsoNormal" style=""><span style="font-size:10.0pt;font-family:Consolas;color:#4F81BD;">
SAMLObjectBuilder<org.opensaml.saml2.ecp.Response> ecpResponseBuilder =
(SAMLObjectBuilder<org.opensaml.saml2.ecp.Response>)
builderFactory.getBuilder(org.opensaml.saml2.ecp.Response.DEFAULT_ELEMENT_NAME);</span></div>
<div class="yiv213462049MsoNormal" style=""><span style="font-size:10.0pt;font-family:Consolas;color:#4F81BD;">
org.opensaml.saml2.ecp.Response ecpResponse = ecpResponseBuilder.buildObject();</span></div><div class="yiv213462049MsoNormal" style=""><span style="font-size:10.0pt;font-family:Consolas;color:#4F81BD;">
ecpResponse.setSOAP11MustUnderstand(true);</span></div>
<div class="yiv213462049MsoNormal" style=""><span style="font-size:10.0pt;font-family:Consolas;color:#4F81BD;">
ecpResponse.setSOAP11Actor(org.opensaml.saml2.ecp.Response.SOAP11_ACTOR_NEXT);</span></div>
<div class="yiv213462049MsoNormal" style=""><span style="font-size:10.0pt;font-family:Consolas;color:#4F81BD;">
ecpResponse.setAssertionConsumerServiceURL("<a rel="nofollow" target="_blank" href="https://localhost:8443/spring-security-saml2-sample">https://localhost:8443/sp_URL</a>");
</span></div>
<div class="yiv213462049MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;color:#4F81BD;">
SOAPHelper.addHeaderBlock(messageContext, ecpResponse);</span></div>
<div class="yiv213462049MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;color:#4F81BD;"> </span></div>
<div class="yiv213462049MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;">And
another way:</span></div>
<div class="yiv213462049MsoNormal" style="text-indent:.5in;"><span style="font-size:10.0pt;font-family:Consolas;color:#953735;">SOAPObjectBuilder<Envelope>
envelopeBuilder = <u>(SOAPObjectBuilder<Envelope>)
builderFactory.getBuilder(Envelope.<i>DEFAULT_ELEMENT_NAME</i>)</u>;</span></div>
<div class="yiv213462049MsoNormal" style=""><span style="font-size:10.0pt;font-family:Consolas;color:#953735;">
Envelope envelope =
envelopeBuilder.buildObject();
</span></div><span style="font-size:10.0pt;font-family:Consolas;color:#953735;">
</span>
<div class="yiv213462049MsoNormal" style=""><span style="font-size:10.0pt;font-family:Consolas;color:#953735;"> SOAPObjectBuilder<Header>
headerBuilder = <u>(SOAPObjectBuilder<Header>)
builderFactory.getBuilder(Header.<i>DEFAULT_ELEMENT_NAME</i>)</u>;</span></div>
<div class="yiv213462049MsoNormal" style=""><span style="font-size:10.0pt;font-family:Consolas;color:#953735;">
Header header = headerBuilder.buildObject(); </span></div><span style="font-size:10.0pt;font-family:Consolas;color:#953735;"> </span>
<div class="yiv213462049MsoNormal" style=""><span style="font-size:10.0pt;font-family:Consolas;color:#953735;"> SAMLObjectBuilder<org.opensaml.saml2.ecp.Response>
ecpResponseBuilder = <u>(SAMLObjectBuilder<org.opensaml.saml2.ecp.Response>)
builderFactory.getBuilder(org.opensaml.saml2.ecp.Response.<i>DEFAULT_ELEMENT_NAME</i>)</u>;</span></div>
<div class="yiv213462049MsoNormal" style=""><span style="font-size:10.0pt;font-family:Consolas;color:#953735;">
org.opensaml.saml2.ecp.Response ecpResponse = ecpResponseBuilder.buildObject();</span></div>
<div class="yiv213462049MsoNormal" style=""><span style="font-size:10.0pt;font-family:Consolas;color:#953735;">
ecpResponse.setSOAP11MustUnderstand(<b>true</b>);</span></div>
<div class="yiv213462049MsoNormal" style=""><span style="font-size:10.0pt;font-family:Consolas;color:#953735;">
ecpResponse.setSOAP11Actor(org.opensaml.saml2.ecp.Response.<i>SOAP11_ACTOR_NEXT</i>);</span></div>
<div class="yiv213462049MsoNormal" style=""><span style="font-size:10.0pt;font-family:Consolas;color:#953735;">
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;">
</span>
</div><div class="yiv213462049MsoNormal" style=""><span style="font-size:10.0pt;font-family:Consolas;color:#953735;">
header.getUnknownXMLObjects().add(ecpResponse);</span></div>
<div class="yiv213462049MsoNormal" style=""><span style="font-size:10.0pt;font-family:Consolas;color:#953735;">
envelope.setHeader(header);</span><span style="font-size:10.0pt;font-family:Consolas;color:#953735;"> </span>
</div><div class="yiv213462049MsoNormal" style=""><span style="font-size:10.0pt;font-family:Consolas;color:#953735;"> <span style="background:yellow;">messageContext</span>.setOutboundMessage(envelope);</span></div>
<div class="yiv213462049MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;color:#953735;"> <u><span style="background:yellow;">messageContext</span>.setOutboundSAMLMessage(authResponse)</u>;
</span></div>
<div class="yiv213462049MsoNormal"><span style="color:#4F81BD;"> <br></span>This is how the message is encoded:<br>
<div class="yiv213462049MsoNormal" 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="yiv213462049MsoNormal"> </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></div></div></div></div></div><br> </div> </div> </div></body></html>