protected virtual async Task <bool> HandleRemoteSignOutAsync() { var(id, message) = await ExtractInfoFromSignOutResponse(); AuthenticationProperties requestProperties = new AuthenticationProperties(); requestProperties.Load(Request, Options.StateDataFormat); var logoutRequest = requestProperties.GetLogoutRequest(); var validSignOut = ValidateSignOutResponse(message, logoutRequest); if (!validSignOut) { return(false); } var remoteSignOutContext = await _eventsHandler.HandleRemoteSignOut(Context, Scheme, Options, message); if (remoteSignOutContext.Result != null) { if (remoteSignOutContext.Result.Handled) { Logger.RemoteSignOutHandledResponse(); return(true); } if (remoteSignOutContext.Result.Skipped) { Logger.RemoteSignOutSkipped(); return(false); } } Logger.RemoteSignOut(); await Context.SignOutAsync(Options.SignOutScheme); Response.Redirect(requestProperties.RedirectUri); return(true); }