asp.net identity 는 cookie 방식으로 운영됩니다. 그래서 iis 재시작해도 끊어지지 않고 계속 인증이 해지되지 않고 유지 되어 사용할 수 있습니다. 만약에 재시작이나 패치 후 강제로 끊어지게 할려면 강제 로그아웃을 해서 쿠키를 삭제해야 하는데요. 이는 session 을 활용하여 간단하게 아래와 같이 filter 를 만들어 두어서 global 전역에 반영해 두면 됩니다.
아래 코드엔 없지만, 인증 ok~ 되면 Session["Username"] = "값"; 을 넣어 두시기 바랍니다.
public class SessionHandler : ActionFilterAttribute
{
private ApplicationUserManager _userManager;
private IAuthenticationManager AuthenticationManager
{
get
{
return HttpContext.Current.GetOwinContext().Authentication;
}
}
public ApplicationUserManager UserManager
{
get
{
return _userManager ?? HttpContext.Current.GetOwinContext().GetUserManager<ApplicationUserManager>();
}
private set
{
_userManager = value;
}
}
public IIdentity UserIdentity
{
get { return System.Web.HttpContext.Current.User.Identity; }
}
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
if (!string.IsNullOrWhiteSpace(UserIdentity.GetUserId()))
{
if (System.Web.HttpContext.Current.Session["Username"] == null)
{
AuthenticationManager.SignOut();
filterContext.Result = new RedirectToRouteResult(
new RouteValueDictionary
{
{ "action", "Index" },
{ "controller", "Home" }
});
}
}
}
}