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



我想为MVC 5(OWIN(网站提供两个功能,用于身份验证cookie:

  • 显示每个用户的 Cookie 过期时间
  • 强制登录,即使 Cookie 未过期

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

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

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

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

在 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);
}

最新更新