<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> I am trying to send Logout Request from SP using OpenSAML Java api. But i am getting the following exception:</div><div><br></div><div class="yiv6857082002MsoNormal">org.opensaml.ws.message.encoder.MessageEncodingException: The signing credential's algorithm URI could not be derived</div><div class="yiv6857082002MsoNormal"> at org.opensaml.saml2.binding.encoding.HTTPRedirectDeflateEncoder.getSignatureAlgorithmURI(HTTPRedirectDeflateEncoder.java:223)</div><div class="yiv6857082002MsoNormal"> at org.opensaml.saml2.binding.encoding.HTTPRedirectDeflateEncoder.buildRedirectURL(HTTPRedirectDeflateEncoder.java:188)</div><div
class="yiv6857082002MsoNormal"> at org.opensaml.saml2.binding.encoding.HTTPRedirectDeflateEncoder.doEncode(HTTPRedirectDeflateEncoder.java:104)</div><div class="yiv6857082002MsoNormal"> at org.opensaml.ws.message.encoder.BaseMessageEncoder.encode(BaseMessageEncoder.java:52)</div><div style="background-color: transparent;"></div><div class="yiv6857082002MsoNormal"> at AcsServlet.sendLogoutRequest(AcsServlet.java:263)</div><div class="yiv6857082002MsoNormal" style="background-color: transparent;"><br></div><div class="yiv6857082002MsoNormal" style="background-color: transparent;">Here is the SP code:</div><div class="yiv6857082002MsoNormal" style="background-color: transparent;"><br></div><div class="yiv6857082002MsoNormal" style="background-color: transparent;"><span class="yiv6857082002Apple-tab-span" style="white-space: pre;">        
        </span>XMLObjectBuilderFactory builderFactory = Configuration.getBuilderFactory();</div><div class="yiv6857082002MsoNormal" style="background-color: transparent;"><span class="yiv6857082002Apple-tab-span" style="white-space: pre;">                </span>SAMLObjectBuilder<LogoutRequest> logoutRequestBuilder = (SAMLObjectBuilder<LogoutRequest>) builderFactory</div><div class="yiv6857082002MsoNormal" style="background-color: transparent;"><span class="yiv6857082002Apple-tab-span" style="white-space: pre;">                                </span>.getBuilder(LogoutRequest.DEFAULT_ELEMENT_NAME);</div><div class="yiv6857082002MsoNormal" style="background-color: transparent;"><span class="yiv6857082002Apple-tab-span" style="white-space: pre;">                </span>LogoutRequest logoutRequest = logoutRequestBuilder.buildObject();</div><div class="yiv6857082002MsoNormal" style="background-color: transparent;"><span class="yiv6857082002Apple-tab-span" style="white-space: pre;">                </span></div><div
class="yiv6857082002MsoNormal" style="background-color: transparent;"><span class="yiv6857082002Apple-tab-span" style="white-space: pre;">                </span>String randId = UUID.randomUUID().toString();</div><div class="yiv6857082002MsoNormal" style="background-color: transparent;"><span class="yiv6857082002Apple-tab-span" style="white-space: pre;">                </span>logoutRequest.setID(randId);</div><div class="yiv6857082002MsoNormal" style="background-color: transparent;"><span class="yiv6857082002Apple-tab-span" style="white-space: pre;">                </span>logoutRequest.setVersion(SAMLVersion.VERSION_20);</div><div class="yiv6857082002MsoNormal" style="background-color: transparent;"><span class="yiv6857082002Apple-tab-span" style="white-space: pre;">                </span>DateTime issueInstant = new DateTime();</div><div class="yiv6857082002MsoNormal" style="background-color: transparent;"><span class="yiv6857082002Apple-tab-span" style="white-space: pre;">        
        </span>logoutRequest.setIssueInstant(issueInstant);</div><div class="yiv6857082002MsoNormal" style="background-color: transparent;"><span class="yiv6857082002Apple-tab-span" style="white-space: pre;">                </span></div><div class="yiv6857082002MsoNormal" style="background-color: transparent;"><span class="yiv6857082002Apple-tab-span" style="white-space: pre;">                </span>SAMLObjectBuilder<NameID> nameIdBuilder = (SAMLObjectBuilder<NameID>) builderFactory</div><div class="yiv6857082002MsoNormal" style="background-color: transparent;"><span class="yiv6857082002Apple-tab-span" style="white-space: pre;">                                </span>.getBuilder(NameID.DEFAULT_ELEMENT_NAME);</div><div class="yiv6857082002MsoNormal" style="background-color: transparent;"><span class="yiv6857082002Apple-tab-span" style="white-space: pre;">                </span>NameID nameId = nameIdBuilder.buildObject();</div><div class="yiv6857082002MsoNormal" style="background-color: transparent;"><span
class="yiv6857082002Apple-tab-span" style="white-space: pre;">                </span>nameId.setFormat(loginNameId.getFormat());</div><div class="yiv6857082002MsoNormal" style="background-color: transparent;"><span class="yiv6857082002Apple-tab-span" style="white-space: pre;">                </span>nameId.setValue(loginNameId.getValue());</div><div class="yiv6857082002MsoNormal" style="background-color: transparent;"><span class="yiv6857082002Apple-tab-span" style="white-space: pre;">                </span>logoutRequest.setNameID(nameId);</div><div class="yiv6857082002MsoNormal" style="background-color: transparent;"><br></div><div class="yiv6857082002MsoNormal" style="background-color: transparent;"><span class="yiv6857082002Apple-tab-span" style="white-space: pre;">                </span>// set user logout as reason</div><div class="yiv6857082002MsoNormal" style="background-color: transparent;"><span class="yiv6857082002Apple-tab-span" style="white-space: pre;">        
        </span>logoutRequest.setReason("urn:oasis:names:tc:SAML:2.0:logout:user");</div><div class="yiv6857082002MsoNormal" style="background-color: transparent;"><span class="yiv6857082002Apple-tab-span" style="white-space: pre;">                </span></div><div class="yiv6857082002MsoNormal" style="background-color: transparent;"><span class="yiv6857082002Apple-tab-span" style="white-space: pre;">                </span>if(sessIndexes != null) {</div><div class="yiv6857082002MsoNormal" style="background-color: transparent;"><span class="yiv6857082002Apple-tab-span" style="white-space: pre;">                        </span>SAMLObjectBuilder<SessionIndex> sessionindexBuilder = (SAMLObjectBuilder<SessionIndex>) builderFactory</div><div class="yiv6857082002MsoNormal" style="background-color: transparent;"><span class="yiv6857082002Apple-tab-span" style="white-space: pre;">                        </span>.getBuilder(SessionIndex.DEFAULT_ELEMENT_NAME);</div><div class="yiv6857082002MsoNormal" style="background-color:
transparent;"><span class="yiv6857082002Apple-tab-span" style="white-space: pre;">                        </span>for(String sessIndex : sessIndexes) {</div><div class="yiv6857082002MsoNormal" style="background-color: transparent;"><span class="yiv6857082002Apple-tab-span" style="white-space: pre;">                                </span>SessionIndex sessionindex = sessionindexBuilder.buildObject();</div><div class="yiv6857082002MsoNormal" style="background-color: transparent;"> <span class="yiv6857082002Apple-tab-span" style="white-space: pre;">                                </span>sessionindex.setSessionIndex(sessIndex);</div><div class="yiv6857082002MsoNormal" style="background-color: transparent;"><span class="yiv6857082002Apple-tab-span" style="white-space: pre;">                                </span>logoutRequest.getSessionIndexes().add(sessionindex);<span class="yiv6857082002Apple-tab-span" style="white-space: pre;">                                </span></div><div class="yiv6857082002MsoNormal" style="background-color: transparent;"><span
class="yiv6857082002Apple-tab-span" style="white-space: pre;">                        </span>}</div><div class="yiv6857082002MsoNormal" style="background-color: transparent;"><span class="yiv6857082002Apple-tab-span" style="white-space: pre;">                </span>}</div><div class="yiv6857082002MsoNormal" style="background-color: transparent;"><span class="yiv6857082002Apple-tab-span" style="white-space: pre;">                </span></div><div class="yiv6857082002MsoNormal" style="background-color: transparent;"><span class="yiv6857082002Apple-tab-span" style="white-space: pre;">                </span>SAMLObjectBuilder<Issuer> issuerBuilder = (SAMLObjectBuilder<Issuer>) builderFactory</div><div class="yiv6857082002MsoNormal" style="background-color: transparent;"><span class="yiv6857082002Apple-tab-span" style="white-space: pre;">                                </span>.getBuilder(Issuer.DEFAULT_ELEMENT_NAME);</div><div class="yiv6857082002MsoNormal" style="background-color: transparent;"><span class="yiv6857082002Apple-tab-span"
style="white-space: pre;">                </span>Issuer issuer = issuerBuilder.buildObject();</div><div class="yiv6857082002MsoNormal" style="background-color: transparent;"><span class="yiv6857082002Apple-tab-span" style="white-space: pre;">                </span>issuer.setValue("https://inw00003973:8443");</div><div class="yiv6857082002MsoNormal" style="background-color: transparent;"><span class="yiv6857082002Apple-tab-span" style="white-space: pre;">                </span>logoutRequest.setIssuer(issuer);<span class="yiv6857082002Apple-tab-span" style="white-space: pre;">                </span></div><div class="yiv6857082002MsoNormal" style="background-color: transparent;"><span class="yiv6857082002Apple-tab-span" style="white-space: pre;">                </span>logoutRequest.setDestination("https://inw00003973/idp/profile/SAML2/POST/SLO");</div><div class="yiv6857082002MsoNormal" style="background-color: transparent;"><span class="yiv6857082002Apple-tab-span" style="white-space: pre;">                </span></div><div
class="yiv6857082002MsoNormal" style="background-color: transparent;"><span class="yiv6857082002Apple-tab-span" style="white-space: pre;">                </span>SAMLObjectBuilder<Endpoint> endpointBuilder = (SAMLObjectBuilder<Endpoint>) builderFactory</div><div class="yiv6857082002MsoNormal" style="background-color: transparent;"><span class="yiv6857082002Apple-tab-span" style="white-space: pre;">                                </span>.getBuilder(AssertionConsumerService.DEFAULT_ELEMENT_NAME);</div><div class="yiv6857082002MsoNormal" style="background-color: transparent;"><span class="yiv6857082002Apple-tab-span" style="white-space: pre;">                </span>Endpoint samlEndpoint = endpointBuilder.buildObject();</div><div class="yiv6857082002MsoNormal" style="background-color: transparent;"><span class="yiv6857082002Apple-tab-span" style="white-space: pre;">                </span>// samlEndpoint.setBinding(HTTPPostEncoder.BINDING_URI);</div><div class="yiv6857082002MsoNormal" style="background-color:
transparent;"><span class="yiv6857082002Apple-tab-span" style="white-space: pre;">                </span>samlEndpoint.setLocation("https://inw00003973/idp/profile/SAML2/POST/SLO");</div><div class="yiv6857082002MsoNormal" style="background-color: transparent;"><span class="yiv6857082002Apple-tab-span" style="white-space: pre;">                </span>samlEndpoint.setResponseLocation("https://inw00003973:8443/testsp/SSOLogoutServlet");</div><div class="yiv6857082002MsoNormal" style="background-color: transparent;"><span class="yiv6857082002Apple-tab-span" style="white-space: pre;">                </span></div><div class="yiv6857082002MsoNormal" style="background-color: transparent;"><span class="yiv6857082002Apple-tab-span" style="white-space: pre;">                </span>HttpServletResponseAdapter outTransport = new HttpServletResponseAdapter(resp, true);</div><div class="yiv6857082002MsoNormal" style="background-color: transparent;"><span class="yiv6857082002Apple-tab-span" style="white-space: pre;">        
        </span>outTransport.setHeader("Pragma", "no-cache");</div><div class="yiv6857082002MsoNormal" style="background-color: transparent;"><span class="yiv6857082002Apple-tab-span" style="white-space: pre;">                </span>outTransport.setHeader("Cache-Control", "no-cache, no-store");</div><div class="yiv6857082002MsoNormal" style="background-color: transparent;"><span class="yiv6857082002Apple-tab-span" style="white-space: pre;">                </span></div><div class="yiv6857082002MsoNormal" style="background-color: transparent;"><span class="yiv6857082002Apple-tab-span" style="white-space: pre;">        
        </span>BasicSAMLMessageContext messageContext = new BasicSAMLMessageContext();</div><div class="yiv6857082002MsoNormal" style="background-color: transparent;"><span class="yiv6857082002Apple-tab-span" style="white-space: pre;">                </span>messageContext.setOutboundMessageTransport(outTransport);</div><div class="yiv6857082002MsoNormal" style="background-color: transparent;"><span class="yiv6857082002Apple-tab-span" style="white-space: pre;">                </span>messageContext.setOutboundSAMLMessage(logoutRequest);</div><div class="yiv6857082002MsoNormal" style="background-color: transparent;"><span class="yiv6857082002Apple-tab-span" style="white-space: pre;">                </span>messageContext.setPeerEntityEndpoint(samlEndpoint);</div><div class="yiv6857082002MsoNormal" style="background-color: transparent;"><span class="yiv6857082002Apple-tab-span" style="white-space: pre;">                </span>LOG.info("logoutRequest = "+ logoutRequest);</div><div class="yiv6857082002MsoNormal"
style="background-color: transparent;"><span class="yiv6857082002Apple-tab-span" style="white-space: pre;">        
        </span>LOG.info("messageContext.getOutboundSAMLMessage() = "+ messageContext.getOutboundSAMLMessage());</div><div class="yiv6857082002MsoNormal" style="background-color: transparent;"><span class="yiv6857082002Apple-tab-span" style="white-space: pre;">                </span>//Get IDP public certificate path</div><div class="yiv6857082002MsoNormal" style="background-color: transparent;"> String publicKeyFilePath = getServletContext().getRealPath(</div><div class="yiv6857082002MsoNormal" style="background-color: transparent;"> "./keys/idp_public.cert");<span class="yiv6857082002Apple-tab-span" style="white-space: pre;">                </span></div><div class="yiv6857082002MsoNormal" style="background-color: transparent;"><span class="yiv6857082002Apple-tab-span" style="white-space: pre;">                </span>FileInputStream fin = new FileInputStream(publicKeyFilePath);</div><div class="yiv6857082002MsoNormal"
style="background-color: transparent;"><span class="yiv6857082002Apple-tab-span" style="white-space: pre;">        
        </span>CertificateFactory f = CertificateFactory.getInstance("X.509");</div><div class="yiv6857082002MsoNormal" style="background-color: transparent;"><span class="yiv6857082002Apple-tab-span" style="white-space: pre;">                </span>X509Certificate certificate = (X509Certificate)f.generateCertificate(fin);</div><div class="yiv6857082002MsoNormal" style="background-color: transparent;"><span class="yiv6857082002Apple-tab-span" style="white-space: pre;">                </span>//IDP public key</div><div class="yiv6857082002MsoNormal" style="background-color: transparent;"><span class="yiv6857082002Apple-tab-span" style="white-space: pre;">                </span>PublicKey publicKey = certificate.getPublicKey();</div><div class="yiv6857082002MsoNormal" style="background-color: transparent;"><span class="yiv6857082002Apple-tab-span" style="white-space: pre;">                </span></div><div class="yiv6857082002MsoNormal" style="background-color: transparent;"><span class="yiv6857082002Apple-tab-span"
style="white-space: pre;">                </span>BasicX509Credential credential = new BasicX509Credential();</div><div class="yiv6857082002MsoNormal" style="background-color: transparent;"><span class="yiv6857082002Apple-tab-span" style="white-space: pre;">                </span>credential.setPublicKey(publicKey);</div><div class="yiv6857082002MsoNormal" style="background-color: transparent;"><span class="yiv6857082002Apple-tab-span" style="white-space: pre;">                </span>messageContext.setOutboundSAMLMessageSigningCredential(credential);<span class="yiv6857082002Apple-tab-span" style="white-space: pre;">                </span></div><div class="yiv6857082002MsoNormal" style="background-color: transparent;"><span class="yiv6857082002Apple-tab-span" style="white-space: pre;">                </span></div><div class="yiv6857082002MsoNormal" style="background-color: transparent;"><span class="yiv6857082002Apple-tab-span" style="white-space: pre;">                </span>MarshallerFactory factory =
org.opensaml.xml.Configuration.getMarshallerFactory();</div><div class="yiv6857082002MsoNormal" style="background-color: transparent;"><span class="yiv6857082002Apple-tab-span" style="white-space: pre;">                </span>Marshaller marshaller = factory.getMarshaller(messageContext.getOutboundSAMLMessage());</div><div class="yiv6857082002MsoNormal" style="background-color: transparent;"><span class="yiv6857082002Apple-tab-span" style="white-space: pre;">                </span>Node node = null;</div><div class="yiv6857082002MsoNormal" style="background-color: transparent;"><span class="yiv6857082002Apple-tab-span" style="white-space: pre;">                </span>try {</div><div class="yiv6857082002MsoNormal" style="background-color: transparent;"><span class="yiv6857082002Apple-tab-span" style="white-space: pre;">                        </span>node = marshaller.marshall(messageContext.getOutboundSAMLMessage());</div><div class="yiv6857082002MsoNormal" style="background-color: transparent;"><span
class="yiv6857082002Apple-tab-span" style="white-space: pre;">                </span>}</div><div class="yiv6857082002MsoNormal" style="background-color: transparent;"><span class="yiv6857082002Apple-tab-span" style="white-space: pre;">                </span>catch (MarshallingException e) {</div><div class="yiv6857082002MsoNormal" style="background-color: transparent;"><span class="yiv6857082002Apple-tab-span" style="white-space: pre;">                        </span>throw e;</div><div class="yiv6857082002MsoNormal" style="background-color: transparent;"><span class="yiv6857082002Apple-tab-span" style="white-space: pre;">                </span>}</div><div class="yiv6857082002MsoNormal" style="background-color: transparent;"><span class="yiv6857082002Apple-tab-span" style="white-space: pre;">                </span>String msg = XMLHelper.prettyPrintXML(node);</div><div class="yiv6857082002MsoNormal" style="background-color: transparent;"><span class="yiv6857082002Apple-tab-span" style="white-space: pre;">        
        </span>LOG.info(msg);</div><div class="yiv6857082002MsoNormal" style="background-color: transparent;"><br></div><div class="yiv6857082002MsoNormal" style="background-color: transparent;"><span class="yiv6857082002Apple-tab-span" style="white-space: pre;">                </span>HTTPRedirectDeflateEncoder encoder = new HTTPRedirectDeflateEncoder();</div><div class="yiv6857082002MsoNormal" style="background-color: transparent;"><span class="yiv6857082002Apple-tab-span" style="white-space: pre;">                </span>try {</div><div class="yiv6857082002MsoNormal" style="background-color: transparent;"><span class="yiv6857082002Apple-tab-span" style="white-space: pre;">                
        </span>encoder.encode(messageContext);</div><div class="yiv6857082002MsoNormal" style="background-color: transparent;"><span class="yiv6857082002Apple-tab-span" style="white-space: pre;">                </span>}</div><div class="yiv6857082002MsoNormal" style="background-color: transparent;"><span class="yiv6857082002Apple-tab-span" style="white-space: pre;">                </span>catch (MessageEncodingException e) {</div><div class="yiv6857082002MsoNormal" style="background-color: transparent;"><span class="yiv6857082002Apple-tab-span" style="white-space: pre;">                        </span>e.printStackTrace();</div><div class="yiv6857082002MsoNormal" style="background-color: transparent;"><span class="yiv6857082002Apple-tab-span" style="white-space: pre;">                        </span>throw e;</div><div class="yiv6857082002MsoNormal" style="background-color: transparent;"><span class="yiv6857082002Apple-tab-span" style="white-space: pre;">                </span>}</div><div class="yiv6857082002MsoNormal" style="background-color:
transparent;"><br></div><div class="yiv6857082002MsoNormal" style="background-color: transparent;"><span style="background-color: transparent;">Thanks,</span><br></div><div class="yiv6857082002MsoNormal" style="background-color: transparent;">Vasu</div></div></body></html>