<html><body><div style="color:#000; background-color:#fff; font-family:HelveticaNeue, Helvetica Neue, Helvetica, Arial, Lucida Grande, Sans-Serif;font-size:12pt"><div>Hi,</div><div>&nbsp;I am trying to send Logout Request from SP using the following java code. But i am getting the following exception:</div><div><br></div><div class="MsoNormal">org.opensaml.ws.message.encoder.MessageEncodingException:
The signing credential's algorithm URI could not be derived<o:p></o:p></div><div class="MsoNormal">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at
org.opensaml.saml2.binding.encoding.HTTPRedirectDeflateEncoder.getSignatureAlgorithmURI(HTTPRedirectDeflateEncoder.java:223)<o:p></o:p></div><div class="MsoNormal">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at
org.opensaml.saml2.binding.encoding.HTTPRedirectDeflateEncoder.buildRedirectURL(HTTPRedirectDeflateEncoder.java:188)<o:p></o:p></div><div class="MsoNormal">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at
org.opensaml.saml2.binding.encoding.HTTPRedirectDeflateEncoder.doEncode(HTTPRedirectDeflateEncoder.java:104)<o:p></o:p></div><div class="MsoNormal">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at
org.opensaml.ws.message.encoder.BaseMessageEncoder.encode(BaseMessageEncoder.java:52)<o:p></o:p></div><div style="background-color: transparent;">









</div><div class="MsoNormal">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at
AcsServlet.sendLogoutRequest(AcsServlet.java:263)<o:p></o:p></div><div class="MsoNormal" style="color: rgb(0, 0, 0); font-size: 16px; font-family: HelveticaNeue, 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: transparent; font-style: normal;"><br></div><div class="MsoNormal" style="color: rgb(0, 0, 0); font-size: 16px; font-family: HelveticaNeue, 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: transparent; font-style: normal;">Here is the code SP code:</div><div class="MsoNormal" style="color: rgb(0, 0, 0); font-size: 16px; font-family: HelveticaNeue, 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: transparent; font-style: normal;"><br></div><div class="MsoNormal" style="background-color: transparent;"><span class="Apple-tab-span" style="white-space:pre">                </span>XMLObjectBuilderFactory builderFactory = Configuration.getBuilderFactory();</div><div
 class="MsoNormal" style="background-color: transparent;"><span class="Apple-tab-span" style="white-space:pre">                </span>SAMLObjectBuilder&lt;LogoutRequest&gt; logoutRequestBuilder = (SAMLObjectBuilder&lt;LogoutRequest&gt;) builderFactory</div><div class="MsoNormal" style="background-color: transparent;"><span class="Apple-tab-span" style="white-space:pre">                                </span>.getBuilder(LogoutRequest.DEFAULT_ELEMENT_NAME);</div><div class="MsoNormal" style="background-color: transparent;"><span class="Apple-tab-span" style="white-space:pre">                </span>LogoutRequest logoutRequest = logoutRequestBuilder.buildObject();</div><div class="MsoNormal" style="background-color: transparent;"><span class="Apple-tab-span" style="white-space:pre">                </span></div><div class="MsoNormal" style="background-color: transparent;"><span class="Apple-tab-span" style="white-space:pre">                </span>String randId = UUID.randomUUID().toString();</div><div class="MsoNormal"
 style="background-color: transparent;"><span class="Apple-tab-span" style="white-space:pre">                </span>logoutRequest.setID(randId);</div><div class="MsoNormal" style="background-color: transparent;"><span class="Apple-tab-span" style="white-space:pre">                </span>logoutRequest.setVersion(SAMLVersion.VERSION_20);</div><div class="MsoNormal" style="background-color: transparent;"><span class="Apple-tab-span" style="white-space:pre">                </span>DateTime issueInstant = new DateTime();</div><div class="MsoNormal" style="background-color: transparent;"><span class="Apple-tab-span" style="white-space:pre">                </span>logoutRequest.setIssueInstant(issueInstant);</div><div class="MsoNormal" style="background-color: transparent;"><span class="Apple-tab-span" style="white-space:pre">                </span></div><div class="MsoNormal" style="background-color: transparent;"><span class="Apple-tab-span" style="white-space:pre">                </span>SAMLObjectBuilder&lt;NameID&gt; nameIdBuilder =
 (SAMLObjectBuilder&lt;NameID&gt;) builderFactory</div><div class="MsoNormal" style="background-color: transparent;"><span class="Apple-tab-span" style="white-space:pre">                                </span>.getBuilder(NameID.DEFAULT_ELEMENT_NAME);</div><div class="MsoNormal" style="background-color: transparent;"><span class="Apple-tab-span" style="white-space:pre">                </span>NameID nameId = nameIdBuilder.buildObject();</div><div class="MsoNormal" style="background-color: transparent;"><span class="Apple-tab-span" style="white-space:pre">                </span>nameId.setFormat(loginNameId.getFormat());</div><div class="MsoNormal" style="background-color: transparent;"><span class="Apple-tab-span" style="white-space:pre">                </span>nameId.setValue(loginNameId.getValue());</div><div class="MsoNormal" style="background-color: transparent;"><span class="Apple-tab-span" style="white-space:pre">                </span>logoutRequest.setNameID(nameId);</div><div class="MsoNormal" style="background-color:
 transparent;"><br></div><div class="MsoNormal" style="background-color: transparent;"><span class="Apple-tab-span" style="white-space:pre">                </span>// set user logout as reason</div><div class="MsoNormal" style="background-color: transparent;"><span class="Apple-tab-span" style="white-space:pre">                </span>logoutRequest.setReason("urn:oasis:names:tc:SAML:2.0:logout:user");</div><div class="MsoNormal" style="background-color: transparent;"><span class="Apple-tab-span" style="white-space:pre">                </span></div><div class="MsoNormal" style="background-color: transparent;"><span class="Apple-tab-span" style="white-space:pre">                </span>if(sessIndexes != null) {</div><div class="MsoNormal" style="background-color: transparent;"><span class="Apple-tab-span" style="white-space:pre">                        </span>SAMLObjectBuilder&lt;SessionIndex&gt; sessionindexBuilder = (SAMLObjectBuilder&lt;SessionIndex&gt;) builderFactory</div><div class="MsoNormal" style="background-color:
 transparent;"><span class="Apple-tab-span" style="white-space:pre">                        </span>.getBuilder(SessionIndex.DEFAULT_ELEMENT_NAME);</div><div class="MsoNormal" style="background-color: transparent;"><span class="Apple-tab-span" style="white-space:pre">                        </span>for(String sessIndex : sessIndexes) {</div><div class="MsoNormal" style="background-color: transparent;"><span class="Apple-tab-span" style="white-space:pre">                                </span>SessionIndex sessionindex = sessionindexBuilder.buildObject();</div><div class="MsoNormal" style="background-color: transparent;">&nbsp;<span class="Apple-tab-span" style="white-space:pre">                                </span>sessionindex.setSessionIndex(sessIndex);</div><div class="MsoNormal" style="background-color: transparent;"><span class="Apple-tab-span" style="white-space:pre">                                </span>logoutRequest.getSessionIndexes().add(sessionindex);<span class="Apple-tab-span" style="white-space:pre">                                </span></div><div class="MsoNormal" style="background-color:
 transparent;"><span class="Apple-tab-span" style="white-space:pre">                        </span>}</div><div class="MsoNormal" style="background-color: transparent;"><span class="Apple-tab-span" style="white-space:pre">                </span>}</div><div class="MsoNormal" style="background-color: transparent;"><span class="Apple-tab-span" style="white-space:pre">                </span></div><div class="MsoNormal" style="background-color: transparent;"><span class="Apple-tab-span" style="white-space:pre">                </span>SAMLObjectBuilder&lt;Issuer&gt; issuerBuilder = (SAMLObjectBuilder&lt;Issuer&gt;) builderFactory</div><div class="MsoNormal" style="background-color: transparent;"><span class="Apple-tab-span" style="white-space:pre">                                </span>.getBuilder(Issuer.DEFAULT_ELEMENT_NAME);</div><div class="MsoNormal" style="background-color: transparent;"><span class="Apple-tab-span" style="white-space:pre">                </span>Issuer issuer = issuerBuilder.buildObject();</div><div class="MsoNormal" style="background-color:
 transparent;"><span class="Apple-tab-span" style="white-space:pre">                </span>issuer.setValue("https://inw00003973:8443");</div><div class="MsoNormal" style="background-color: transparent;"><span class="Apple-tab-span" style="white-space:pre">                </span>logoutRequest.setIssuer(issuer);<span class="Apple-tab-span" style="white-space:pre">                </span></div><div class="MsoNormal" style="background-color: transparent;"><span class="Apple-tab-span" style="white-space:pre">                </span>logoutRequest.setDestination("https://inw00003973/idp/profile/SAML2/POST/SLO");</div><div class="MsoNormal" style="background-color: transparent;"><span class="Apple-tab-span" style="white-space:pre">                </span></div><div class="MsoNormal" style="background-color: transparent;"><span class="Apple-tab-span" style="white-space:pre">                </span>SAMLObjectBuilder&lt;Endpoint&gt; endpointBuilder = (SAMLObjectBuilder&lt;Endpoint&gt;) builderFactory</div><div class="MsoNormal"
 style="background-color: transparent;"><span class="Apple-tab-span" style="white-space:pre">                                </span>.getBuilder(AssertionConsumerService.DEFAULT_ELEMENT_NAME);</div><div class="MsoNormal" style="background-color: transparent;"><span class="Apple-tab-span" style="white-space:pre">                </span>Endpoint samlEndpoint = endpointBuilder.buildObject();</div><div class="MsoNormal" style="background-color: transparent;"><span class="Apple-tab-span" style="white-space:pre">                </span>// samlEndpoint.setBinding(HTTPPostEncoder.BINDING_URI);</div><div class="MsoNormal" style="background-color: transparent;"><span class="Apple-tab-span" style="white-space:pre">                </span>samlEndpoint.setLocation("https://inw00003973/idp/profile/SAML2/POST/SLO");</div><div class="MsoNormal" style="background-color: transparent;"><span class="Apple-tab-span" style="white-space:pre">                </span>samlEndpoint.setResponseLocation("https://inw00003973:8443/testsp/SSOLogoutServlet");</div><div
 class="MsoNormal" style="background-color: transparent;"><span class="Apple-tab-span" style="white-space:pre">                </span></div><div class="MsoNormal" style="background-color: transparent;"><span class="Apple-tab-span" style="white-space:pre">                </span>HttpServletResponseAdapter outTransport = &nbsp;new HttpServletResponseAdapter(resp, true);</div><div class="MsoNormal" style="background-color: transparent;"><span class="Apple-tab-span" style="white-space:pre">                </span>outTransport.setHeader("Pragma", "no-cache");</div><div class="MsoNormal" style="background-color: transparent;"><span class="Apple-tab-span" style="white-space:pre">                </span>outTransport.setHeader("Cache-Control", "no-cache, no-store");</div><div class="MsoNormal" style="background-color: transparent;"><span class="Apple-tab-span" style="white-space:pre">                </span></div><div class="MsoNormal" style="background-color: transparent;"><span class="Apple-tab-span" style="white-space:pre">        
        </span>BasicSAMLMessageContext messageContext = new BasicSAMLMessageContext();</div><div class="MsoNormal" style="background-color: transparent;"><span class="Apple-tab-span" style="white-space:pre">                </span>messageContext.setOutboundMessageTransport(outTransport);</div><div class="MsoNormal" style="background-color: transparent;"><span class="Apple-tab-span" style="white-space:pre">                </span>messageContext.setOutboundSAMLMessage(logoutRequest);</div><div class="MsoNormal" style="background-color: transparent;"><span class="Apple-tab-span" style="white-space:pre">                </span>messageContext.setPeerEntityEndpoint(samlEndpoint);</div><div class="MsoNormal" style="background-color: transparent;"><span class="Apple-tab-span" style="white-space:pre">                </span>LOG.info("logoutRequest = "+ logoutRequest);</div><div class="MsoNormal" style="background-color: transparent;"><span class="Apple-tab-span" style="white-space:pre">        
        </span>LOG.info("messageContext.getOutboundSAMLMessage() = "+ messageContext.getOutboundSAMLMessage());</div><div class="MsoNormal" style="background-color: transparent;"><span class="Apple-tab-span" style="white-space:pre">                </span>//Get IDP public certificate path</div><div class="MsoNormal" style="background-color: transparent;">&nbsp; &nbsp; &nbsp; &nbsp; String publicKeyFilePath = getServletContext().getRealPath(</div><div class="MsoNormal" style="background-color: transparent;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; "./keys/idp_public.cert");<span class="Apple-tab-span" style="white-space:pre">                </span></div><div class="MsoNormal" style="background-color: transparent;"><span class="Apple-tab-span" style="white-space:pre">                </span>FileInputStream fin = new FileInputStream(publicKeyFilePath);</div><div class="MsoNormal" style="background-color: transparent;"><span class="Apple-tab-span" style="white-space:pre">        
        </span>CertificateFactory f = CertificateFactory.getInstance("X.509");</div><div class="MsoNormal" style="background-color: transparent;"><span class="Apple-tab-span" style="white-space:pre">                </span>X509Certificate certificate = (X509Certificate)f.generateCertificate(fin);</div><div class="MsoNormal" style="background-color: transparent;"><span class="Apple-tab-span" style="white-space:pre">                </span>//IDP public key</div><div class="MsoNormal" style="background-color: transparent;"><span class="Apple-tab-span" style="white-space:pre">                </span>PublicKey publicKey = certificate.getPublicKey();</div><div class="MsoNormal" style="background-color: transparent;"><span class="Apple-tab-span" style="white-space:pre">                </span></div><div class="MsoNormal" style="background-color: transparent;"><span class="Apple-tab-span" style="white-space:pre">                </span>BasicX509Credential credential = new BasicX509Credential();</div><div class="MsoNormal"
 style="background-color: transparent;"><span class="Apple-tab-span" style="white-space:pre">                </span>credential.setPublicKey(publicKey);</div><div class="MsoNormal" style="background-color: transparent;"><span class="Apple-tab-span" style="white-space:pre">                </span>messageContext.setOutboundSAMLMessageSigningCredential(credential);<span class="Apple-tab-span" style="white-space:pre">                </span></div><div class="MsoNormal" style="background-color: transparent;"><span class="Apple-tab-span" style="white-space:pre">                </span></div><div class="MsoNormal" style="background-color: transparent;"><span class="Apple-tab-span" style="white-space:pre">                </span>MarshallerFactory factory = org.opensaml.xml.Configuration.getMarshallerFactory();</div><div class="MsoNormal" style="background-color: transparent;"><span class="Apple-tab-span" style="white-space:pre">                </span>Marshaller marshaller = factory.getMarshaller(messageContext.getOutboundSAMLMessage());</div><div
 class="MsoNormal" style="background-color: transparent;"><span class="Apple-tab-span" style="white-space:pre">                </span>Node node = null;</div><div class="MsoNormal" style="background-color: transparent;"><span class="Apple-tab-span" style="white-space:pre">                </span>try {</div><div class="MsoNormal" style="background-color: transparent;"><span class="Apple-tab-span" style="white-space:pre">                        </span>node = marshaller.marshall(messageContext.getOutboundSAMLMessage());</div><div class="MsoNormal" style="background-color: transparent;"><span class="Apple-tab-span" style="white-space:pre">                </span>}</div><div class="MsoNormal" style="background-color: transparent;"><span class="Apple-tab-span" style="white-space:pre">                </span>catch (MarshallingException e) {</div><div class="MsoNormal" style="background-color: transparent;"><span class="Apple-tab-span" style="white-space:pre">                        </span>throw e;</div><div class="MsoNormal" style="background-color:
 transparent;"><span class="Apple-tab-span" style="white-space:pre">                </span>}</div><div class="MsoNormal" style="background-color: transparent;"><span class="Apple-tab-span" style="white-space:pre">                </span>String msg = XMLHelper.prettyPrintXML(node);</div><div class="MsoNormal" style="background-color: transparent;"><span class="Apple-tab-span" style="white-space:pre">                </span>LOG.info(msg);</div><div class="MsoNormal" style="background-color: transparent;"><br></div><div class="MsoNormal" style="background-color: transparent;"><span class="Apple-tab-span" style="white-space:pre">                </span>HTTPRedirectDeflateEncoder encoder = new HTTPRedirectDeflateEncoder();</div><div class="MsoNormal" style="background-color: transparent;"><span class="Apple-tab-span" style="white-space:pre">                </span>try {</div><div class="MsoNormal" style="background-color: transparent;"><span class="Apple-tab-span" style="white-space:pre">                
        </span>encoder.encode(messageContext);</div><div class="MsoNormal" style="background-color: transparent;"><span class="Apple-tab-span" style="white-space:pre">                </span>}</div><div class="MsoNormal" style="background-color: transparent;"><span class="Apple-tab-span" style="white-space:pre">                </span>catch (MessageEncodingException e) {</div><div class="MsoNormal" style="background-color: transparent;"><span class="Apple-tab-span" style="white-space:pre">                        </span>e.printStackTrace();</div><div class="MsoNormal" style="background-color: transparent;"><span class="Apple-tab-span" style="white-space:pre">                        </span>throw e;</div><div class="MsoNormal" style="background-color: transparent;"><span class="Apple-tab-span" style="white-space:pre">                </span>}</div><div class="MsoNormal" style="background-color: transparent; color: rgb(0, 0, 0); font-size: 16px; font-family: HelveticaNeue, 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; font-style:
 normal;"><br></div><div class="MsoNormal" style="background-color: transparent; color: rgb(0, 0, 0); font-size: 16px; font-family: HelveticaNeue, 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; font-style: normal;"><span style="background-color: transparent;">Thanks,</span><br></div><div class="MsoNormal" style="background-color: transparent; color: rgb(0, 0, 0); font-size: 16px; font-family: HelveticaNeue, 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; font-style: normal;">Vasu</div><div class="MsoNormal" style="color: rgb(0, 0, 0); font-size: 16px; font-family: HelveticaNeue, 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: transparent; font-style: normal;"><br></div></div></body></html>