protected void Page_Load(object sender, EventArgs e) { try { Trace.Write("SP", "Single Logout Service"); // Receive the logout request or response. XmlElement logoutMessage = null; string relayState = null; bool isRequest = false; bool signed = false; X509Certificate2 x509Certificate = (X509Certificate2)Application[Global.IdPX509Certificate]; SingleLogoutService.ReceiveLogoutMessageByHTTPRedirect(Request, out logoutMessage, out relayState, out isRequest, out signed, x509Certificate.PublicKey.Key); if (isRequest) { ProcessLogoutRequest(new LogoutRequest(logoutMessage), relayState); } else { ProcessLogoutResponse(new LogoutResponse(logoutMessage), relayState); } } catch (Exception exception) { Trace.Write("SP", "Error in single logout service.", exception); } }
protected void logoutButton_Click(object sender, EventArgs e) { try { // Create a logout request. LogoutRequest logoutRequest = new LogoutRequest(); logoutRequest.Issuer = new Issuer(CreateAbsoluteURL("~/")); logoutRequest.NameID = new NameID(Context.User.Identity.Name); // Serialize the logout request to XML for transmission. XmlElement logoutRequestXml = logoutRequest.ToXml(); // Send the logout request to the IdP over HTTP redirect. string logoutURL = WebConfigurationManager.AppSettings["idpLogoutURL"]; X509Certificate2 x509Certificate = (X509Certificate2)Application[Global.SPX509Certificate]; SingleLogoutService.SendLogoutRequestByHTTPRedirect(Response, logoutURL, logoutRequestXml, null, x509Certificate.PrivateKey); // Logout locally. FormsAuthentication.SignOut(); Session.Abandon(); } catch (Exception exception) { Trace.Write("SP", "Error on logout page", exception); } }
// Send the logout response. private void SendLogoutResponse(ref LogoutResponse logoutResponse) { Trace.Write("SP", "Sending logout response."); // Serialize the logout response for transmission. XmlElement logoutResponseXml = logoutResponse.ToXml(); // Send the logout response over HTTP redirect. X509Certificate2 x509Certificate = (X509Certificate2)Application[Global.SPX509Certificate]; SingleLogoutService.SendLogoutResponseByHTTPRedirect(Response, WebConfigurationManager.AppSettings["idpLogoutURL"], logoutResponseXml, null, x509Certificate.PrivateKey, null); Trace.Write("SP", "Sent logout response."); }