访问被拒绝冒充当前用户访问网络文件夹

Per*_*ert 10 .net c# asp.net impersonation delegation

尝试列出特定文件夹中的目录和文件.此文件夹将取决于Windows身份验证(NTLM)登录的当前用户(Page.User),并从Active Directory(homedirectory属性)中检索.

我使用域用户访问AD并检索文件夹位置,这很好.

失败的是System.IO.DirectoryInfo.GetDirectories()即使使用模拟也要检索子文件夹.

这是我用于模仿的代码:

System.Security.Principal.WindowsImpersonationContext impersonationContext;
impersonationContext =  ((System.Security.Principal.WindowsIdentity)User.Identity).Impersonate();
Run Code Online (Sandbox Code Playgroud)

我已经检查过被模拟的用户是否可以访问该文件夹.

从我到目前为止发现,似乎我需要设置委派或Kerberos身份验证,这是真的吗?这些是实现这一目标的唯一方法吗?模仿不应该够吗?

Grh*_*rhm 2

模拟允许网站服务帐户模拟(假装是)该计算机上的另一个用户。因此,查询 AD 以查看您(或模拟用户)拥有哪些权限是被允许的。

请求访问另一台计算机上的 UNC 共享就是要求另一台计算机接受网站服务帐户代表被模拟的用户进行操作。这就是委托。另一台机器本身并不检查用户凭据,而是将检查委托给网络服务器。

如果客户端从另一台计算机连接网站(通常是网络服务器的情况),那么您将有一个从客户端到网络服务器再到 UNC 文件服务器的“双跳”。

我建议您需要配置 Kerberos(通过 SetSPN 实用程序)并查看为网站服务帐户(在 AD 用户和计算机中)启用委派权限。如果您在设置时遇到问题,我衷心推荐一个名为DeleConfig的工具。