public ActionResult ProcessFederationRequest() { var action = Request.QueryString[WSFederationConstants.Parameters.Action]; try { switch (action) { case WSFederationConstants.Actions.SignIn: { var requestMessage = (SignInRequestMessage)WSFederationMessage.CreateFromUri(Request.Url); if (User != null && User.Identity != null && User.Identity.IsAuthenticated) { var sts = new MultiProtocolSecurityTokenService(MultiProtocolSecurityTokenServiceConfiguration.Current); var responseMessage = FederatedPassiveSecurityTokenServiceOperations.ProcessSignInRequest(requestMessage, User, sts); responseMessage.Write(Response.Output); Response.Flush(); Response.End(); HttpContext.ApplicationInstance.CompleteRequest(); } else { // user not authenticated yet, look for whr, if not there go to HomeRealmDiscovery page this.CreateFederationContext(); if (string.IsNullOrEmpty(this.Request.QueryString[WSFederationConstants.Parameters.HomeRealm])) { return this.RedirectToAction("HomeRealmDiscovery"); } else { return this.Authenticate(); } } } break; case WSFederationConstants.Actions.SignOut: { var requestMessage = (SignOutRequestMessage)WSFederationMessage.CreateFromUri(Request.Url); FederatedPassiveSecurityTokenServiceOperations.ProcessSignOutRequest(requestMessage, User, requestMessage.Reply, HttpContext.ApplicationInstance.Response); } break; default: throw new InvalidOperationException( String.Format( CultureInfo.InvariantCulture, "The action '{0}' (Request.QueryString['{1}']) is unexpected. Expected actions are: '{2}' or '{3}'.", String.IsNullOrEmpty(action) ? "<EMPTY>" : action, WSFederationConstants.Parameters.Action, WSFederationConstants.Actions.SignIn, WSFederationConstants.Actions.SignOut)); } } catch (Exception exception) { throw new Exception("An unexpected error occurred when processing the request. See inner exception for details.", exception); } return null; }