如何在ASP.Net MVC 3 _Intranet_应用程序中重新验证用户?

Pri*_*ter 6 asp.net-mvc windows-authentication pre-authentication

让我解释一下:应用程序已经在使用Windows集成安全性,而不是Forms.我想要完成的是所谓的"升级"身份验证,或针对以下场景的"强制重新身份验证":

  1. 用户正在浏览网站,做一些普通的,琐碎的事情
  2. 突然,用户必须执行敏感操作,例如授权资源分配或确认汽车贷款或类似的东西
  3. 在将用户重定向到敏感页面之前,系统会提示用户输入凭据,其方式类似于SharePoint的"以其他用户身份登录"
  4. 如果且仅当输入的凭证与当前登录的用户相同时,应用程序才会进入敏感区域.

这样可以防止以下两个问题:

  1. 用户去参加会议或喝咖啡并忘记锁定工作站,同事使用会话来访问敏感区域
  2. 用户输入他或她的老板的凭证(因为,让我们说他偷看了老板的sholder)来访问敏感区域.

我知道,有些人会认为这是"偏执狂",但有些人会说它是常识,应该在某个地方构建(jQuery或.NET)

我真的很感激任何输入.谢谢!

tva*_*son 5

让表单将凭据与请求一起发送以执行该操作,即某些操作要求您提供用户名/密码。使用PrincipalContext ValidateCredentials方法来确保已输入正确的凭据,并检查提供的用户名是否与User.Identity对象中的当前用户名匹配。

public ActionResult SensitiveAction( SensitiveModel model, string username, string password )
{
    using (var context = new PrincipalContext(ContextType.Domain))
    {
         if (!string.Equals(this.User.Identity.Name,username,StringComparison.OrdinalIgnoreCase)
             || !context.ValidateCredentials(username,password))
         {
              return View("PermissionDenied");
         }
    }

    ...
}
Run Code Online (Sandbox Code Playgroud)