OWIN身份验证Cookie信息,即使未过期也强制登录

时间:2018-09-19 16:09:18

标签: authentication cookies model-view-controller owin

我想为MVC 5(OWIN)网站的身份验证Cookie提供两项功能:-

  • 显示每个用户的cookie有效期
  • 即使cookie没有过期也要强制登录

用户登录后,该cookie及其包含的声明就会在其浏览器上。

尽管每次访问服务器时都会这样做,但我设法获得了cookie信息。

就强制登录而言,我要么更新cookie(如果用户未与网站进行交互就不可能),要么在每次登录时按名称查找用户。

我的回答如下-如果有人有更好的答案,请告诉我

1 个答案:

答案 0 :(得分:0)

在OWIN启动类中,我添加了一个自定义身份验证方法。管理员可以在身份数据库中设置一个字段,以强制下次登录。缺点是每次用户访问网页时都会对数据库造成打击。

如果用户这次必须登录,则清除“强制登录”标志,该用户注销并重定向到主页,然后转到主页(并在登录后重定向回主页)。

此代码还检索cookie信息,以显示在管理员可以查看的用户列表中。

private static Task MyCustomValidateIdentity(CookieValidateIdentityContext context)
        {
            var db = ApplicationDbContext.Create();
            var userName = context.Identity.GetUserName();
            var user = (from u in db.Users where u.UserName == userName select u).FirstOrDefault();

            if (user != null)
            {
                if (user.ForceLoginNextTime)
                {
                    user.ForceLoginNextTime = false;
                    db.SaveChanges();

                    context.OwinContext.Authentication.SignOut(context.Options.AuthenticationType);
                    context.Response.Redirect("/Home");
                }
            }

            var i = (from u in __userInfo where u.userName == userName select u).FirstOrDefault();

            if (i == null)
            {
                i = new UserInfo();
                __userInfo.Add(i);
            }

            i.userName = userName;
            i.CookieIssuedUtc = context.Properties.IssuedUtc;
            i.CookieExpiresUtc = context.Properties.ExpiresUtc;
            i.CookieIsPersistent = context.Properties.IsPersistent;

            return Task.FromResult(0);
        }