2012-12-19 63 views
10

尝试列出特定文件夹中的目录和文件。此文件夹将取决于当前用户(Page.User),它由Windows身份验证(NTLM)登录并从Active Directory(homedirectory属性)中检索。访问被拒绝冒充当前用户访问网络文件夹

我正在使用域用户访问AD并检索文件夹位置,这工作正常。

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

下面是我使用模拟代码:

System.Security.Principal.WindowsImpersonationContext impersonationContext; 
impersonationContext = ((System.Security.Principal.WindowsIdentity)User.Identity).Impersonate(); 

我已经检查了正在模拟用户访问该文件夹。

从我发现迄今为止,似乎我需要设置委派或Kerberos身份验证,这是真的吗?这是实现这一目标的唯一途径吗?不应该冒充足够的?

+1

你是否检查了此Stackoverflow上一篇文章..? http://stackoverflow.com/questions/2563724/accessing-password-protected-network-drives-in-windows-in-c/2563809#2563809 – MethodMan

回答

2

模拟允许网站服务帐户冒充(伪装成)该机器上的另一个用户。因此,查询AD以查看您(或模拟的用户)拥有的权利是允许的。

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

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

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