在MVC应用程序中重新验证用户的操作

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 401AuthorizeCore方法中发出响应来强制用户重新输入其凭据.但是,这需要一些技巧,因为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)

有没有更好的方法来完成重新授权?

mmi*_*uva 0

如果用户正在执行 POST,您能否将用户名和密码字段添加到该表单,然后在控制器中或使用 ActionFilter 根据 Active Directory 验证凭据?