6

让我解释一下:应用程序已经在使用Windows集成安全性,而不是表单。我试图做到的是所谓的“一步式”的认证,或“强制重新认证”为以下情形:如何在ASP.Net MVC 3 _Intranet_应用程序中重新验证用户?

  1. 用户正在浏览的网站做普通,平凡的东西
  2. 突然,用户必须执行敏感操作,例如授权 资源分配或确认汽车贷款或类似的东西
  3. 在用户被重定向到 敏感页面之前,用户被以类似的方式提示他输入凭证到SharePoint的“登录为 不同的用户”
  4. 当且仅当输入的凭证是 与当前登录用户相同时,应用程序 才会进入敏感区域。

这将防止以下2个问题:

  1. 用户去开会或咖啡,忘记锁定 工作站和同事使用会话访问敏感 区域
  2. 用户输入他或她的老板的凭据(因为,让我们 说他偷看老板的嘲弄者)进入敏感区域。

我知道,有些人把这看作“妄想症”,也有些人会说这是常识,应该是建立在某处的框架(jQuery的或.NET)

我会很感激任何输入。谢谢!

+1

为了记录,我不认为在处理敏感信息时存在“处于偏执状态”这样的事情。你有没有尝试过为你的网站配置一个虚拟目录? –

+0

这是我几乎从不使用集成身份验证的原因之一 - 它将安全性委托给工作站安全性,我无法控制它。 – tvanfosson

回答

4

让窗体发送证书以及执行操作的请求,即某些操作要求您提供用户名/密码。使用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"); 
     } 
    } 

    ... 
} 
+1

感谢您的及时回复!但是这意味着创建一个新的视图来通过https手动获取凭证。有没有像SharePoint一样使用内置凭证提示的方法?我想这是通过尝试访问受保护的文件“_layouts/AccessDenied.aspx”来实现的。 – PricklyMaster

2

用户去开会或咖啡,忘记锁定工作站和同事使用会话访问敏感区域 那只能是第一次,但现在老板进入一个敏感地区,重新输入她的证书,然后去喝咖啡。你会提示每一个敏感的要求吗?用户不会忍受这一点。

用户输入他或她的老板的凭据(因为,假设他偷看老板的嘲弄者)进入敏感区域。 如果有人知道并输入了老板的凭证,那么您无法做出任何检测。

相关问题