public static string GetRedirectUrl(SignOutMessage message, IDictionary <string, object> env, IdentityServerOptions options) { var result = new LogoutResult(message, env, options); var response = result.Execute(); return(response.Headers.Location.AbsoluteUri); }
public SignOutMessage CreateSignoutMessage(ValidatedEndSessionRequest request) { var message = new SignOutMessage(); if (request.Client != null) { message.ClientId = request.Client.ClientId; if (request.PostLogOutUri != null) { message.ReturnUrl = request.PostLogOutUri; } else { if (request.Client.PostLogoutRedirectUris.Any()) { message.ReturnUrl = request.Client.PostLogoutRedirectUris.First(); } } if (request.State.IsPresent()) { if (message.ReturnUrl.IsPresent()) { message.ReturnUrl = message.ReturnUrl.AddQueryString("state=" + request.State); } } } return(message); }
public Task <Stream> LoggedOut(LoggedOutViewModel model, SignOutMessage message) { // return Render(model, "loggedOut"); var stream = StringToStream(RazorExtensions.RenderCustomView("loggedOut", "home", model)); return(Task.FromResult(stream)); }
public virtual Task <Stream> LoggedOut(LoggedOutViewModel model, SignOutMessage message) { string content = null; string url = model?.RedirectUrl ?? message?.ReturnUrl; if (!string.IsNullOrEmpty(url)) { content = $@"<!DOCTYPE html> <html> <head> <meta http-equiv='refresh' content='0;{url}'> </head> <body></body> </html>"; } else { content = $@"<!DOCTYPE html> <html> <head> <title>No redirect url on logout</title> </head> <body> No redirect url on logout. Perhaps your redirect url is not listed in {nameof(OAuthClientsProvider.GetClients)} of {nameof(OAuthClientsProvider)} </body> </html>"; } return(ReturnHtmlAsync(model, content, OwinContext.Request.CallCancelled)); }
public virtual async Task <Stream> LoggedOut(LoggedOutViewModel model, SignOutMessage message) { string content = null; if (!string.IsNullOrEmpty(model.RedirectUrl)) { content = $@"<!DOCTYPE html> <html> <head> <meta http-equiv='refresh' content='0;{model.RedirectUrl}'> </head> <body></body> </html>"; } else { content = @"<!DOCTYPE html> <html> <head> <title>No redirect url on logout</title> </head> <body> No redirect url on logout </body> </html>"; } return(await ReturnHtmlAsync(model, content, CancellationToken.None).ConfigureAwait(false)); }
public override Task <Stream> LoggedOut(LoggedOutViewModel model, SignOutMessage message) { var controller = GetController <LoginController>(); var result = RenderLogoutAction(controller, model, message); return(Task.FromResult(result)); }
/// <summary> /// Loads the HTML for the logged out page informing the user that they have successfully logged out. /// </summary> /// <param name="model">The model.</param> /// <param name="message"></param> /// <returns> /// Stream for the HTML /// </returns> public Task <Stream> LoggedOut(LoggedOutViewModel model, SignOutMessage message) { return(this.GenerateStream( model, "loggedOut", () => this.defaultViewService.LoggedOut(model, message))); }
public void Logout(IdentityToken token, string clientId) { SignOutMessage msg = new SignOutMessage() { ClientId = clientId, IdentityToken = token }; var result = AuthenticationServiceAdapter.Execute(it => it.Logout(msg)); token = result.IdentityToken; }
private IHttpActionResult RedirectToLogOut(string returnUrl) { var message = new SignOutMessage { ReturnUrl = returnUrl }; var env = Request.GetOwinEnvironment(); var url = env.CreateSignOutRequest(message); return(Redirect(url)); }
public virtual async Task <Stream> LoggedOut(LoggedOutViewModel model, SignOutMessage message) { string content = $@"<!DOCTYPE html> <html> <head> <meta http-equiv='refresh' content='0;{model.RedirectUrl}'> </head> <body></body> </html>"; return(await ReturnHtmlAsync(model, content, CancellationToken.None)); }
public LogoutActionResult(IViewService viewSvc, LogoutViewModel model, SignOutMessage message) : base(async() => await viewSvc.Logout(model, message)) { if (viewSvc == null) { throw new ArgumentNullException(nameof(viewSvc)); } if (model == null) { throw new ArgumentNullException(nameof(model)); } }
private async Task <string> GetClientNameFromSignOutMessage(SignOutMessage signOutMessage) { if (signOutMessage != null) { var client = await _clientStore.FindClientByIdAsync(signOutMessage.ClientId); if (client != null) { return(client.ClientName); } } return(null); }
public void LogoutPrompt_WithSignOutMessage_ContainsClientNameInPage() { var c = TestClients.Get().First(); var msg = new SignOutMessage { ClientId = c.ClientId, ReturnUrl = "http://foo" }; var id = WriteMessageToCookie(msg); var resp = Get(Constants.RoutePaths.Logout + "?id=" + id); var model = GetModel <LogoutViewModel>(resp); Assert.AreEqual(c.ClientName, model.ClientName); }
public void LoggedOut_WithSignOutMessage_ContainsClientNameAndRedirectUrlInPage() { var c = TestClients.Get().First(); var msg = new SignOutMessage { ClientId = c.ClientId, ReturnUrl = "http://foo" }; var id = WriteMessageToCookie(msg); var resp = client.PostAsync(Url(Constants.RoutePaths.Logout + "?id=" + id), null).Result; var model = GetModel <LoggedOutViewModel>(resp); Assert.AreEqual(msg.ReturnUrl, model.RedirectUrl); Assert.AreEqual(c.ClientName, model.ClientName); }
public void LoggedOut_WithSignOutMessage_ContainsClientNameAndRedirectUrlInPage() { GetLoginPage(); var c = TestClients.Get().First(); var msg = new SignOutMessage { ClientId = c.ClientId, ReturnUrl = "http://foo" }; var id = WriteMessageToCookie(msg); var resp = PostForm(Url(Constants.RoutePaths.Logout + "?id=" + id), null); var model = resp.GetModel <LoggedOutViewModel>(); model.RedirectUrl.Should().Be(msg.ReturnUrl); model.ClientName.Should().Be(c.ClientName); }
public LogoutResult(SignOutMessage message, IDictionary <string, object> env, IdentityServerOptions options) { if (env == null) { throw new ArgumentNullException("env"); } if (options == null) { throw new ArgumentNullException("options"); } this.env = env; this.options = options; this.message = message; }
public virtual Task <Stream> Logout(LogoutViewModel model, SignOutMessage message) { // Based on current InvokeLogOut Middleware, this method will not be called, because of context.Authentication.SignOut("custom", "Bearer"); code. string content = $@"<!DOCTYPE html> <html> <body> <form id='logoutForm' method='post' action='{model.LogoutUrl}'> <input type='hidden' name='{model.AntiForgery.Name}' value='{model.AntiForgery.Value}'> </form> <script> document.getElementById('logoutForm').submit(); </script> </body> </html>"; return(ReturnHtmlAsync(model, content, OwinContext.Request.CallCancelled)); }
internal static async Task <string> GetClientName(this IClientStore store, SignOutMessage signOutMessage) { if (store == null) { throw new ArgumentNullException("store"); } if (signOutMessage != null && signOutMessage.ClientId.IsPresent()) { var client = await store.FindClientByIdAsync(signOutMessage.ClientId); if (client != null) { return(client.ClientName); } } return(null); }
public ActionResult Logout(LoggedOutViewModel model, SignOutMessage message) { _owinWrapper.SignoutUser(); var logoutUrls = Task.Run(async() => { var returnUrl = await _accountOrchestrator.GetRelyingPartyLogoutUrls(); return(returnUrl); }).Result; model.IFrameUrls = logoutUrls; message = new SignOutMessage { ReturnUrl = _identityServerConfiguration.EmployerPortalUrl }; return(View(new LogOutViewModel { IdsLogoutModel = model, SignOutMessage = message })); }
public static async Task RaiseLogoutEventAsync(this IEventService events, ClaimsPrincipal subject, string signOutId, SignOutMessage signOutMessage) { var evt = new Event <LogoutDetails>( EventConstants.Categories.Authentication, Resources.Events.LogoutEvent, EventTypes.Information, EventConstants.Ids.Logout, new LogoutDetails { SubjectId = subject.GetSubjectId(), Name = subject.Identity.Name, SignOutId = signOutId, SignOutMessage = signOutMessage }); await events.RaiseEventAsync(evt); }
/// <summary> /// Creates the sign out request. /// </summary> /// <param name="env">The env.</param> /// <param name="message">The message.</param> /// <returns></returns> /// <exception cref="System.ArgumentNullException">message</exception> public static string CreateSignOutRequest(this IDictionary <string, object> env, SignOutMessage message) { if (message == null) { throw new ArgumentNullException("message"); } // if there's no return url, then use current request's URL if (message.ReturnUrl.IsMissing()) { var ctx = new OwinContext(env); message.ReturnUrl = ctx.Request.Uri.AbsoluteUri; } if (message.ReturnUrl.StartsWith("~/")) { message.ReturnUrl = message.ReturnUrl.Substring(1); } if (message.ReturnUrl.StartsWith("/")) { message.ReturnUrl = env.GetIdentityServerBaseUrl().RemoveTrailingSlash() + message.ReturnUrl; } var options = env.ResolveDependency <IdentityServerOptions>(); var cookie = new MessageCookie <SignOutMessage>(env, options); var id = cookie.Write(message); var url = env.GetIdentityServerBaseUrl() + Constants.RoutePaths.Logout; var uri = new Uri(url.AddQueryString("id=" + id)); return(uri.AbsoluteUri); }
/// <summary> /// Loads the HTML for the logged out page informing the user that they have successfully logged out. /// </summary> /// <param name="model">The model.</param> /// <param name="message">The message.</param> /// <returns> /// Stream for the HTML /// </returns> public virtual Task <Stream> LoggedOut(LoggedOutViewModel model, SignOutMessage message) { return(Render(model, LoggedOutView)); }
/// <summary> /// Перегруженная версия функции <see cref="DefaultViewService.LoggedOut(LoggedOutViewModel, SignOutMessage)"/>, /// из которой удалено вывод имени клиента. /// </summary> /// <param name="model"> /// Объект <see cref="LoggedOutViewModel"/>, содержит имя клиента, которое в методе приравнивается null. /// </param> /// <param name="message">Объект <see cref="SignOutMessage"/>.</param> /// <returns> /// Возвращаемое значение базового класса <see cref="DefaultViewService"/>, на вход которого /// подаётся модель <see cref="LoggedOutViewModel"/> с отстутствующим именем клиента. /// </returns> public override Task <Stream> LoggedOut(LoggedOutViewModel model, SignOutMessage message) { model.ClientName = null; return(base.LoggedOut(model, message)); }
public Task <Stream> LoggedOut(LoggedOutViewModel model, SignOutMessage message) { return(Render(model, "loggedOut")); }
private void HandleSignOutMessage(SignOutMessage obj) { }
private Stream RenderLogoutAction(LoginController controller, LoggedOutViewModel model, SignOutMessage message) { using (var outputWriter = new StringWriter()) { controller.ControllerContext.RequestContext.HttpContext.Response.Output = outputWriter; controller.ControllerContext.RouteData.Values.Add("action", "Logout"); controller.ControllerContext.RouteData.Values["model"] = model; var viewResult = controller.Logout(model, message); viewResult.ExecuteResult(controller.ControllerContext); outputWriter.Flush(); var content = outputWriter.ToString(); return(new MemoryStream(Encoding.UTF8.GetBytes(content))); } }
public Task <Stream> LoggedOut(LoggedOutViewModel model, SignOutMessage message) { return(Task.FromResult(RunTemplate("loggedout", model, message?.ClientId))); }
public async Task <Stream> LoggedOut(LoggedOutViewModel model, SignOutMessage message) { return(await Render(model, "LoggedOut")); }