Example #1
0
        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);
        }
Example #2
0
        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);
        }
Example #3
0
        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));
        }
Example #6
0
        public override Task <Stream> LoggedOut(LoggedOutViewModel model, SignOutMessage message)
        {
            var controller = GetController <LoginController>();
            var result     = RenderLogoutAction(controller, model, message);

            return(Task.FromResult(result));
        }
Example #7
0
 /// <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));
     }
 }
Example #12
0
        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);
        }
Example #15
0
        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);
        }
Example #16
0
        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));
        }
Example #18
0
        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);
        }
Example #19
0
        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));
 }
Example #23
0
 /// <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"));
 }
Example #25
0
 private void HandleSignOutMessage(SignOutMessage obj)
 {
 }
Example #26
0
        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)));
            }
        }
Example #27
0
 public Task <Stream> LoggedOut(LoggedOutViewModel model, SignOutMessage message)
 {
     return(Task.FromResult(RunTemplate("loggedout", model, message?.ClientId)));
 }
Example #28
0
 public async Task <Stream> LoggedOut(LoggedOutViewModel model, SignOutMessage message)
 {
     return(await Render(model, "LoggedOut"));
 }