具有高度的 ASP.NET 模拟

Posted

技术标签:

【中文标题】具有高度的 ASP.NET 模拟【英文标题】:ASP.NET Impersonation with Elevation 【发布时间】:2013-05-13 01:35:12 【问题描述】:

我有一个通过web.config 配置的 ASP.NET 应用程序来使用这样的模拟:

<system.web>
    <identity impersonate="true" />
    <authentication mode="Windows" />
</system.web>

应用程序需要执行某些管理任务。如果我以用户 administrator 身份登录应用程序,这可以正常工作,但在以 userA 身份登录时不起作用(访问仅限管理的系统资源失败),确实 对系统具有管理权限。

我怀疑这里发生的事情是 UAC 正在介入。虽然 ASP.NET 应用程序正在模拟 userA,但在执行需要提升的操作时,它会失败,而以 administrator 运行很好,因为该用户从提升权限开始(如果在 Windows 中以交互方式执行操作,则永远不会收到 UAC 提示)。

顺便说一句,我不需要网络级别的模拟,所以我认为我不需要delegation

【问题讨论】:

“应用程序需要执行某些管理任务” - 任务是什么? “哪个在系统上具有管理访问权限”-该用户 userA 在该计算机的本地管理员组中吗? “任务是什么?” - 读写系统目录中的文件。 userA 是否在该机器的本地管理员组中?” - 是的,或者在某些情况下它会在域组中。我很高兴将该要求仅限于本地管理员组。 我刚刚发现,只有当我的浏览器与 IIS 位于同一台机器上,并且我尝试以我登录到 Windows 的同一用户身份登录时,才会出现这种情况作为。我猜它正在检测我有一个交互式登录会话并想要抛出一个 UAC 提示。但是如果我在单独的机器上,UAC 就会被绕过。有趣的是,在大多数(但不是全部)情况下,以管理员身份运行浏览器可以解决问题,可能是因为它“预先提升”了 UAC。 但是现在在另一台服务器上,即使在单独的机器上运行浏览器,也会出现问题。 困惑 你找到解决办法了吗 【参考方案1】:

我们公司在内部申请和 UAC 上搞砸了两个多星期。我们采取了两种方法来解决这个问题。

首先,我们创建了一个安全组和安全策略,创建了一个用户并分配了 Web 应用程序池以作为该用户运行。这解决了我们的一些问题。

如果这并不能解决我们的所有问题,并且我们无法修复应用程序以使用我们可以授予它的权限...我们关闭了该服务器上的 UAC。这是迄今为止巨大的安全风险,在某些地方这是不可接受的。但是,我们可以获得一些需要完成的任务所需的管理员令牌。

我怀疑是否有可能让应用程序池向桌面用户提供 UAC 身份验证框,因为提供了沙盒服务。如果适用,您可能需要与相关的系统管理员/IT 部门讨论不同方法的风险和好处。

【讨论】:

感谢史蒂文分享您的经验,这些是一些值得探索的替代方法,但我坚持希望有更直接的解决方案。 我也在密切关注这个问题,因为我喜欢重新审视这种情况。

以上是关于具有高度的 ASP.NET 模拟的主要内容,如果未能解决你的问题,请参考以下文章

在标准 ASP.NET MVC 安装模板中模拟用户

asp.net - 覆盖基于配置的模拟

ASP.NET - 模拟不起作用

identity与ASP.NET 模拟

在 C#、asp.net、windows 身份中模拟

在asp.net核心的嵌套iframe中动态设置高度