use*_*199 6 authentication asp.net-mvc windows-authentication asp.net-mvc-4
在MVC中执行Action之前,如何强制用户重新进行身份验证?
我们正在使用Windows身份验证.我们希望确保某些操作由用户执行(如果用户忘记锁定其工作站,则阻止其他用户执行这些操作).
理想情况下,我只能编写一个扩展的属性Authorize:
namespace AuthTest.Controllers
{
[Authorize(Roles="MyApp")]
public class HomeController : Controller
{
public ActionResult Index()
{
// A regular action
return View();
}
[ReAuthenticate]
public ActionResult CriticalAction()
{
// Do something important
return View();
}
}
}
Run Code Online (Sandbox Code Playgroud)
看来我可以通过让自定义ReAuthenticate属性HTTP 401在AuthorizeCore方法中发出响应来强制用户重新输入其凭据.但是,这需要一些技巧,因为Html.ActionLink发送了两个请求:
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
bool ok = base.AuthorizeCore(httpContext);
if (!ok) return false;
if (httpContext.Session["ReAuthCnt"] == null)
{
httpContext.Session["ReAuthCnt"] = 1;
return false;
}
else if ((int) httpContext.Session["ReAuthCnt"] < 2)
{
httpContext.Session["ReAuthCnt"] = (int)httpContext.Session["ReAuthCnt"] + 1;
return false;
}
else
{
httpContext.Session["ReAuthCnt"] = 0;
return true;
}
}
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法来完成重新授权?