<div dir="ltr"><div dir="ltr">Hi all,<div><br></div><div>I've just started migrating my older OpenSAMLv2 code to use the newer v3 library and I'm having some trouble getting the HTTPPostEncoder to work for single logout.</div><div><br></div><div>I've built a LogoutRequest and wrapped it in a MessageContext, but when I call the encode method the subsequent SAML request is sent using an OPTIONS request. My understanding of OPTIONS is that it's used for CORS to determine if the destination server will accept the subsequent requests, but when I use a SAML trace tool my LogoutRequest is being sent in the OPTIONS request body. Any idea where I could be going wrong? Here's my code:</div><div><br></div><div><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px">public class IdentityProviderSingleLogoutRedirect {</span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px">    private void redirectUserForLogout(HttpServletResponse response, String username, String sessionIndex) {</span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px">        LogoutRequestMessageContextGenerator generator = new LogoutRequestMessageContextGenerator(IdentityProvider.get(), ServiceProvider.get());</span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px">        MessageContext<SAMLObject> context = generator.generate(username, sessionIndex);</span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px">        redirectUserWithRequest(response, context);</span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px">    }</span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px"><br></span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px">    /**</span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px">     * Redirects client to Identity Provider with signed LogoutRequest</span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px">     * @param response</span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px">     * @param context</span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px">     */</span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px">    private void redirectUserWithRequest(HttpServletResponse response, MessageContext<SAMLObject> context) {</span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px">        HTTPPostEncoder encoder = new HTTPPostEncoder();</span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px">        encoder.setMessageContext(context);</span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px">        encoder.setHttpServletResponse(response);</span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px">        encoder.setVelocityEngine(buildVelocityEngine());</span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px"><br></span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px">        try {</span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px">            encoder.initialize();</span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px">        } catch (ComponentInitializationException e) {</span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px">            throw Error.HTTPPOSTENCODER_INITIALIZATION_ERROR.with(e);</span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px">        }</span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px"><br></span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px">        try {</span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px">            logger.debug("Redirecting to Identity Provider");</span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px">            encoder.encode();</span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px">        } catch (MessageEncodingException e) {</span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px">            throw Error.IDENTITY_PROVIDER_REDIRECT_ERROR.with(e);</span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px">        }</span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px">    }</span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px"><br></span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px">    private VelocityEngine buildVelocityEngine() {</span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px">        VelocityEngine velocityEngine = new VelocityEngine();</span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px">        velocityEngine.setProperty(RuntimeConstants.ENCODING_DEFAULT, "UTF-8");</span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px">        velocityEngine.setProperty(RuntimeConstants.OUTPUT_ENCODING, "UTF-8");</span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px">        velocityEngine.setProperty(RuntimeConstants.RESOURCE_LOADER, "classpath");</span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px">        velocityEngine.setProperty("classpath.resource.loader.class", "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader");</span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px">        velocityEngine.init();</span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px"><br></span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px">        return velocityEngine;</span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px">    }</span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px">}</span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px"><br></span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px"><br></span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px">public class LogoutRequestMessageContextGenerator {</span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px"><br></span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px">    private IdentityProvider identityProvider;</span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px"><br></span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px">    private ServiceProvider  serviceProvider;</span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px"><br></span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px">    public LogoutRequestMessageContextGenerator(IdentityProvider identityProvider, ServiceProvider serviceProvider) {</span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px">        if (identityProvider == null) {</span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px">            throw Error.LOGOUT_REQUEST_GENERATOR_CANT_BE_INITIALIZED_IDP.with();</span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px">        }</span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px"><br></span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px">        if (serviceProvider == null) {</span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px">            throw Error.LOGOUT_REQUEST_GENERATOR_CANT_BE_INITIALIZED_SP.with();</span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px">        }</span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px"><br></span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px">        this.identityProvider = identityProvider;</span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px">        this.serviceProvider = serviceProvider;</span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px">    }</span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px"><br></span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px">    public MessageContext<SAMLObject> generate(String username, String sessionIndex) {</span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px">        MessageContext<SAMLObject> context = new MessageContext<>();</span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px">        SAMLEndpointContext endpointContext = context.getSubcontext(SAMLPeerEntityContext.class, true)</span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px">                        .getSubcontext(SAMLEndpointContext.class, true);</span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px"><br></span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px">        endpointContext.setEndpoint(buildIdPSingleLogoutService());</span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px">        LogoutRequest logoutRequest = buildLogoutRequest(username, sessionIndex);</span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px">        context.setMessage(logoutRequest);</span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px"><br></span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px">        SignatureSigningParameters signatureSigningParameters = new SignatureSigningParameters();</span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px">        signatureSigningParameters.setSigningCredential(serviceProvider.getSigningCredential());</span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px">        signatureSigningParameters.setSignatureAlgorithm(serviceProvider.getSignatureAlgorithm());</span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px"><br></span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px">        SecurityParametersContext securityParameterContext = context.getSubcontext(SecurityParametersContext.class, true);</span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px">        securityParameterContext.setSignatureSigningParameters(signatureSigningParameters);</span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px"><br></span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px">        return context;</span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px">    }</span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px"><br></span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px">    /**</span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px">     * Builds an OpenSAML SingleSignOnService object</span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px">     * @return</span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px">     */</span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px">    private Endpoint buildIdPSingleLogoutService() {</span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px">        SingleLogoutService endpoint = OpenSAMLUtils.buildSAMLObject(SingleLogoutService.DEFAULT_ELEMENT_NAME);</span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px">        endpoint.setBinding(SAMLConstants.SAML2_REDIRECT_BINDING_URI);</span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px">        endpoint.setLocation(identityProvider.getLogoutUrl());</span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px"><br></span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px">        return endpoint;</span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px">    }</span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px"><br></span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px">    /**</span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px">     * Builds an OpenSAML LogoutRequest object</span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px">     * @return</span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px">     */</span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px">    private LogoutRequest buildLogoutRequest(String username, String sessionIndex) {</span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px">        LogoutRequest logoutRequest = OpenSAMLUtils.buildSAMLObject(LogoutRequest.DEFAULT_ELEMENT_NAME);</span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px">        logoutRequest.setID(OpenSAMLUtils.generateSecureRandomId());</span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px">        logoutRequest.setIssueInstant(new DateTime());</span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px">        logoutRequest.setDestination(identityProvider.getLogoutUrl());</span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px">        logoutRequest.setIssuer(serviceProvider.buildIssuer());</span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px">        logoutRequest.setNameID(buildNameID(username));</span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px">        logoutRequest.getSessionIndexes().add(buildSessionIndex(sessionIndex));</span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px">        logoutRequest.setReason(LogoutRequest.USER_REASON);</span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px"><br></span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px">        Signature signature = serviceProvider.buildSignature();</span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px"><br></span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px">        if (signature != null) {</span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px">            logoutRequest.setSignature(signature);</span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px">        }</span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px"><br></span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px">        try {</span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px">            XMLObjectProviderRegistrySupport.getMarshallerFactory().getMarshaller(logoutRequest).marshall(logoutRequest);</span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px">        } catch (MarshallingException e) {</span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px">            throw Error.LOGOUT_REQUEST_GENERATOR_CANT_MARSHALL_REQUEST.with();</span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px">        }</span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px"><br></span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px">        if (signature != null) {</span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px">            try {</span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px">                Signer.signObject(signature);</span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px">            } catch (SignatureException e) {</span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px">                Error.LOGOUT_REQUEST_GENERATOR_SIGNING_ERROR.with();</span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px">            }</span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px">        }</span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px"><br></span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px">        return logoutRequest;</span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px">    }</span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px"><br></span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px">    private NameID buildNameID(String username) {</span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px">        NameID nameId = OpenSAMLUtils.buildSAMLObject(NameID.DEFAULT_ELEMENT_NAME);</span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px">        nameId.setValue(username);</span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px">        nameId.setFormat(identityProvider.getNameIDFormat());</span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px"><br></span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px">        return nameId;</span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px">    }</span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px"><br></span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px">    private SessionIndex buildSessionIndex(String sessionId) {</span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px">        SessionIndex sessionIndex = OpenSAMLUtils.buildSAMLObject(SessionIndex.DEFAULT_ELEMENT_NAME);</span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px">        sessionIndex.setSessionIndex(sessionId);</span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px"><br></span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px">        return sessionIndex;</span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px">    }</span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px">}</span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px"><br></span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px">Thanks in advance for the help!</span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px"><br></span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;line-height:normal"><font face="Menlo"><span style="font-size:12px">-Mark</span></font></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;font-size:12px;line-height:normal;font-family:Menlo"><br></p></div></div></div>