如何在 MVC 中执行操作之前强制用户重新进行身份验证?
我们正在使用 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();
}
}
}
看来我可以通过让自定义属性在方法中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;
}
}
有没有更好的方法来完成重新授权?