Sending LogoutRequest from SP
vyal2k
vyal2k at yahoo.com
Sun Nov 24 21:10:19 EST 2013
Hi,
I am trying to send Logout Request from SP using the following java code. But i am getting the following exception:
org.opensaml.ws.message.encoder.MessageEncodingException:
The signing credential's algorithm URI could not be derived
at
org.opensaml.saml2.binding.encoding.HTTPRedirectDeflateEncoder.getSignatureAlgorithmURI(HTTPRedirectDeflateEncoder.java:223)
at
org.opensaml.saml2.binding.encoding.HTTPRedirectDeflateEncoder.buildRedirectURL(HTTPRedirectDeflateEncoder.java:188)
at
org.opensaml.saml2.binding.encoding.HTTPRedirectDeflateEncoder.doEncode(HTTPRedirectDeflateEncoder.java:104)
at
org.opensaml.ws.message.encoder.BaseMessageEncoder.encode(BaseMessageEncoder.java:52)
at
AcsServlet.sendLogoutRequest(AcsServlet.java:263)
Here is the code SP code:
XMLObjectBuilderFactory builderFactory = Configuration.getBuilderFactory();
SAMLObjectBuilder<LogoutRequest> logoutRequestBuilder = (SAMLObjectBuilder<LogoutRequest>) builderFactory
.getBuilder(LogoutRequest.DEFAULT_ELEMENT_NAME);
LogoutRequest logoutRequest = logoutRequestBuilder.buildObject();
String randId = UUID.randomUUID().toString();
logoutRequest.setID(randId);
logoutRequest.setVersion(SAMLVersion.VERSION_20);
DateTime issueInstant = new DateTime();
logoutRequest.setIssueInstant(issueInstant);
SAMLObjectBuilder<NameID> nameIdBuilder = (SAMLObjectBuilder<NameID>) builderFactory
.getBuilder(NameID.DEFAULT_ELEMENT_NAME);
NameID nameId = nameIdBuilder.buildObject();
nameId.setFormat(loginNameId.getFormat());
nameId.setValue(loginNameId.getValue());
logoutRequest.setNameID(nameId);
// set user logout as reason
logoutRequest.setReason("urn:oasis:names:tc:SAML:2.0:logout:user");
if(sessIndexes != null) {
SAMLObjectBuilder<SessionIndex> sessionindexBuilder = (SAMLObjectBuilder<SessionIndex>) builderFactory
.getBuilder(SessionIndex.DEFAULT_ELEMENT_NAME);
for(String sessIndex : sessIndexes) {
SessionIndex sessionindex = sessionindexBuilder.buildObject();
sessionindex.setSessionIndex(sessIndex);
logoutRequest.getSessionIndexes().add(sessionindex);
}
}
SAMLObjectBuilder<Issuer> issuerBuilder = (SAMLObjectBuilder<Issuer>) builderFactory
.getBuilder(Issuer.DEFAULT_ELEMENT_NAME);
Issuer issuer = issuerBuilder.buildObject();
issuer.setValue("https://inw00003973:8443");
logoutRequest.setIssuer(issuer);
logoutRequest.setDestination("https://inw00003973/idp/profile/SAML2/POST/SLO");
SAMLObjectBuilder<Endpoint> endpointBuilder = (SAMLObjectBuilder<Endpoint>) builderFactory
.getBuilder(AssertionConsumerService.DEFAULT_ELEMENT_NAME);
Endpoint samlEndpoint = endpointBuilder.buildObject();
// samlEndpoint.setBinding(HTTPPostEncoder.BINDING_URI);
samlEndpoint.setLocation("https://inw00003973/idp/profile/SAML2/POST/SLO");
samlEndpoint.setResponseLocation("https://inw00003973:8443/testsp/SSOLogoutServlet");
HttpServletResponseAdapter outTransport = new HttpServletResponseAdapter(resp, true);
outTransport.setHeader("Pragma", "no-cache");
outTransport.setHeader("Cache-Control", "no-cache, no-store");
BasicSAMLMessageContext messageContext = new BasicSAMLMessageContext();
messageContext.setOutboundMessageTransport(outTransport);
messageContext.setOutboundSAMLMessage(logoutRequest);
messageContext.setPeerEntityEndpoint(samlEndpoint);
LOG.info("logoutRequest = "+ logoutRequest);
LOG.info("messageContext.getOutboundSAMLMessage() = "+ messageContext.getOutboundSAMLMessage());
//Get IDP public certificate path
String publicKeyFilePath = getServletContext().getRealPath(
"./keys/idp_public.cert");
FileInputStream fin = new FileInputStream(publicKeyFilePath);
CertificateFactory f = CertificateFactory.getInstance("X.509");
X509Certificate certificate = (X509Certificate)f.generateCertificate(fin);
//IDP public key
PublicKey publicKey = certificate.getPublicKey();
BasicX509Credential credential = new BasicX509Credential();
credential.setPublicKey(publicKey);
messageContext.setOutboundSAMLMessageSigningCredential(credential);
MarshallerFactory factory = org.opensaml.xml.Configuration.getMarshallerFactory();
Marshaller marshaller = factory.getMarshaller(messageContext.getOutboundSAMLMessage());
Node node = null;
try {
node = marshaller.marshall(messageContext.getOutboundSAMLMessage());
}
catch (MarshallingException e) {
throw e;
}
String msg = XMLHelper.prettyPrintXML(node);
LOG.info(msg);
HTTPRedirectDeflateEncoder encoder = new HTTPRedirectDeflateEncoder();
try {
encoder.encode(messageContext);
}
catch (MessageEncodingException e) {
e.printStackTrace();
throw e;
}
Thanks,
Vasu
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://shibboleth.net/pipermail/users/attachments/20131124/8b8633a1/attachment-0001.html
More information about the users
mailing list