Asp.net mvc 如何在ASP.NET MVC 3 Intranet应用程序中重新验证用户?

Asp.net mvc 如何在ASP.NET MVC 3 Intranet应用程序中重新验证用户?,asp.net-mvc,windows-authentication,pre-authentication,Asp.net Mvc,Windows Authentication,Pre Authentication,应用程序已在使用Windows集成安全性,而不是窗体。我试图实现的是所谓的“逐步”身份验证,或针对以下场景的“强制重新身份验证”: 用户正在浏览网站,做一些普通的、琐碎的事情 突然,用户必须执行敏感操作,例如授权 资源分配或确认汽车贷款或类似事项 在重定向到之前,系统会提示用户输入凭据 敏感页面,其方式类似于SharePoint的“作为用户登录” “另一个用户” 如果且仅当输入的凭据为 与应用程序中当前登录的用户相同 进入敏感区域 这将防止以下两个问题: 用户去开会或喝咖啡时忘记锁定 工作站和同

应用程序已在使用Windows集成安全性,而不是窗体。我试图实现的是所谓的“逐步”身份验证,或针对以下场景的“强制重新身份验证”:

  • 用户正在浏览网站,做一些普通的、琐碎的事情
  • 突然,用户必须执行敏感操作,例如授权 资源分配或确认汽车贷款或类似事项
  • 在重定向到之前,系统会提示用户输入凭据 敏感页面,其方式类似于SharePoint的“作为用户登录” “另一个用户”
  • 如果且仅当输入的凭据为 与应用程序中当前登录的用户相同 进入敏感区域
  • 这将防止以下两个问题:

  • 用户去开会或喝咖啡时忘记锁定 工作站和同事使用会话访问敏感的 区域
  • 用户输入其上司的凭据(因为 比如说他偷看了老板的肩膀)以进入敏感区域

  • 我知道,有些人会认为这是“偏执狂”,但也有些人会说这是常识,应该构建在某个框架中(jQuery或.NET)

    让表单将凭据与执行操作的请求一起发送,例如,有些操作要求您提供用户名/密码。使用PrincipalContext方法确保输入了正确的凭据,并检查提供的用户名是否与
    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");
             }
        }
    
        ...
    }
    
    用户参加会议或喝咖啡时忘记锁定工作站,同事使用会话访问敏感区域

    这只适用于第一次,但现在老板进入一个敏感区域,重新输入她的证件,然后去喝咖啡。你会为每一个敏感的请求提供提示吗?用户不会容忍的

    用户输入他或她的上司的凭据(因为,比方说,他偷看了上司的肩膀)以访问敏感区域


    如果有人知道并输入了他们老板的凭据,你就无法检测到这一点。

    请注意,在处理敏感信息时,我不认为存在“偏执”的情况。您是否尝试过为您的站点配置虚拟目录?这是我几乎从不使用集成身份验证的原因之一-它将安全性委托给工作站安全性,对此我没有控制权。感谢您的及时回复!但这将意味着创建一个新视图,通过https手动获取凭据。是否有一种方法可以像SharePoint那样使用内置凭据提示符?我猜它是通过尝试访问一个受保护的文件来实现的,
    \u layouts/AccessDenied.aspx
    。这与其说是一个答案,不如说是对这个问题的评论。答案应该保留在为OP的问题或问题陈述提供解决方案的帖子上。