如何在 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 中使用会话变量