【问题标题】:Using ASP.Net Impersonation w/ Windows Authentication使用带有 Windows 身份验证的 ASP.Net 模拟
【发布时间】:2014-09-08 22:35:21
【问题描述】:

我们有一个网络应用程序,可以将文件复制到我们域 (OurDomain) 中的远程服务器。使用另一个域登录到其笔记本电脑,然后使用 OurDomain 登录到 Web 应用程序的用户会出现以下问题。使用 OurDomain\User 同时登录笔记本电脑和 Web 应用程序的用户不会遇到此问题。

我们有两个网络表单:

第一个网络表单使用 System.Security.Principal.WindowsIdentity.GetCurrent() 检索用户 ID,然后使用该用户 ID 发送电子邮件。仅当我们将Windows Authentication 设置为Enabled 并且ASP.Net Impersonation 也设置为Enabled 时,此代码才会检索用户的ID。如果ASP.Net Impersonation 设置为Disabled,则用户将是Network Service。所以我将两者都设置为启用,这里的一切都很好。

第二个网络表单将一些文件复制到远程服务器,也在域 OurDomain 下。将Windows Authentication 设置为Enabled 并将ASP.Net Impersonation 设置为Disabled,则Network Service 用于将文件复制到远程服务器并正确复制。另一方面,如果 ASP.Net Impersonation 设置为 Enabled,它似乎绕过 Network Service 甚至 OurDomain\User 并尝试使用用于登录的凭据进行复制笔记本电脑(另一个域)。文件不复制,我收到错误访问路径被拒绝

我找到的唯一解决方法是将 OurDomain\User 添加到文件夹中,这真的没什么大不了的,但我想看看为什么会这样。

谢谢。

【问题讨论】:

    标签: asp.net .net .net-4.0 iis-6 impersonation


    【解决方案1】:

    我相信 OurDomain\User 是从网络浏览器登录系统的用户。向该组用户授予服务器文件夹访问权限并不是一个好的安全做法。如果您授予这些用户访问权限,他们甚至可以在没有您的 Web 应用程序的情况下浏览远程文件夹。

    NetworkService 是在创建它的系统中具有角色的用户。

    最好在 OruDomain\webappuser 中创建一个 asp.net appPool 用户,即运行 w3wp 工作进程的用户。让密码为 admin.Give OurDomain\webappuser 远程文件夹的权限。在没有模拟的情况下运行 Web 表单。

    现在,当 asp.net 应用程序在 OurDomain\webappuser 的上下文中运行时,通过 webform2 中的文件上传对话框接收到的文件可以安全地复制到文件夹中

    【讨论】:

    • 我无法在 OurDomain 中创建/修改或以任何方式更改用户。
    • 如果除了网络服务之外没有其他方法可以拥有应用程序池用户,您可能需要模拟。即 asp.net 应用程序将像登录浏览器的用户在 Web 服务器中执行程序一样执行。在这种情况下,如果登录浏览器的用户对远程文件夹具有权限,则文件副本将起作用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-27
    • 2011-06-08
    • 1970-01-01
    • 2014-03-01
    • 2011-11-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多