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

Posted

技术标签:

【中文标题】如何在 ASP.NET MVC 3 Intranet 应用程序中重新验证用户身份?【英文标题】:How do I re-authenticate a user in an ASP.NET MVC 3 Intranet application? 【发布时间】:2011-11-26 23:37:37 【问题描述】:

该应用程序已经在使用 Windows 集成安全性,而不是 Forms。我正在尝试完成的是所谓的“升级”身份验证,或以下场景的“强制重新身份验证”:

    用户正在浏览网站做一些常见的、琐碎的事情 突然间,用户不得不进行授权等敏感操作 资源分配或确认汽车贷款或类似的事情 在用户被重定向到之前,系统会提示用户输入凭据 敏感页面,以类似于 SharePoint 的“登录为 不同的用户” 当且仅当输入的凭据是 与当前登录的用户相同的应用程序 前往敏感区域。

这将防止以下两个问题:

    用户去开会或喝咖啡时忘记锁定 工作站和同事使用会话访问敏感 地区 用户输入他或她老板的凭据(因为,让我们 假设他从老板的肩膀上偷看)进入敏感区域。

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

【问题讨论】:

郑重声明,我认为在处理敏感信息时不存在“偏执”之类的东西。您是否尝试过为您的站点配置虚拟目录? 这是我几乎从不使用集成身份验证的原因之一——它将安全性委托给工作站安全性,而我无法控制。 【参考方案1】:

让表单与执行操作的请求一起发送凭据,即,某些操作需要您提供用户名/密码。使用 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");
         
    

    ...

【讨论】:

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

用户去开会或喝咖啡,忘记锁定工作站,同事使用会话访问敏感区域

这只是第一次,但现在老板进入一个敏感区域,重新输入她的凭据,然后去喝咖啡。你会提示每个敏感请求吗?用户不会忍受的。

用户输入他或她的老板的凭据(因为,假设他偷看老板的肩膀)以访问敏感区域。

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

【讨论】:

这更像是对问题的评论而不是答案。答案应保留给为 OP 的问题或问题陈述提供解决方案的帖子。

以上是关于如何在 ASP.NET MVC 3 Intranet 应用程序中重新验证用户身份?的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET Core 3.1 MVC 如何让用户在注册时选择自己的角色?

如何使用 C# 在 ASP.NET Core 3.1 MVC 中使用会话变量

如何在 Asp.Net Mvc 3 中显示自定义错误页面?

如何在 ASP.Net MVC 的 EditorTemplates 中显示一个 RadioButtons 组(3)

如何在 ASP.NET MVC 3 中发布一组文件?

如何在 asp.net mvc 3 项目中路由 .aspx 页面?