【发布时间】:2013-09-30 09:59:30
【问题描述】:
如何强制用户在 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 属性在AuthorizeCore 方法中发出HTTP 401 响应。然而,这需要一些技巧,因为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;
}
}
有没有更好的方法来完成重新授权?
【问题讨论】:
-
重新认证是什么意思?
-
您为什么要这样做?如果用户经过身份验证,那么他们就是经过身份验证的。如果您无法维护身份验证,您可以考虑使用 OAuth。或许如果您再多描述一下您的问题,我们可以提出建议。
-
我已经更新了问题,提供了有关场景和我尝试过的更多细节。
-
嗯,我理解他想要达到的目标,我正在尝试实现类似的目标。我需要让用户重新输入他们的网络密码并对其进行身份验证。这样做的原因是我想用该用户授权对 PDF 进行数字签名。如上所述,通过身份验证不足以让某些机构接受数字签名,因为人们经常将工作站解锁,因此需要对数字签名进行重新身份验证。我还没有尝试解决这个问题,我只是在寻找一些方向,如果我这样做了,我会回复。
-
如何使用 ADFS 或某些联合身份验证在 Web 应用程序中再次对用户进行身份验证,以便您可以使用相同的凭据,尽管需要重新进行身份验证。
标签: asp.net-mvc asp.net-mvc-4 authentication windows-authentication