C# 如何模拟已登录的用户并访问unc文件夹?

C# 如何模拟已登录的用户并访问unc文件夹?,c#,impersonation,unc,C#,Impersonation,Unc,我在模拟登录用户然后访问unc文件时遇到问题。我已尝试使用以下示例代码: using System.Security.Principal; ... // Obtain the authenticated user's Identity WindowsIdentity winId = (WindowsIdentity)HttpContext.Current.User.Identity; WindowsImpersonationContext ctx = null; try { // S

我在模拟登录用户然后访问unc文件时遇到问题。我已尝试使用以下示例代码:

using System.Security.Principal;
...
// Obtain the authenticated user's Identity
WindowsIdentity winId = (WindowsIdentity)HttpContext.Current.User.Identity;
WindowsImpersonationContext ctx = null;
try
{  
    // Start impersonating  
    ctx = winId.Impersonate();  
    // Now impersonating  
    // Access resources using the identity of the authenticated user
}
// Prevent exceptions from propagating
catch{}
finally
{  
    // Revert impersonation  
    if (ctx != null)    
        ctx.Undo();
}
// Back to running under the default ASP.NET process identity
如果我尝试在本地访问一个文件,其中的注释表示使用经过身份验证的用户的身份访问资源,那么它将完全按照它应该的方式工作。但是,如果我尝试使用诸如\\ServerName\Share\FileName.txt之类的UNC对某个文件服务器上的文件执行相同的操作,则模拟帐户是否具有足够的权限并不重要。应用程序引发异常,表示ASP.NET帐户没有足够的权限

我还尝试使用非托管代码来执行模拟,然后它就可以工作了!本地文件或UNC,不要紧,就像一个魅力

问题是,你必须提供密码,因为这是登录用户的权利,我想检查,我不能提供

有人知道为什么应用程序会这样吗?这是我需要设置的一些配置设置吗

Web应用程序以特定的方式运行 身份,此身份基于 本地计算机上的用户帐户或 域名

应用程序使用此标识 当它访问磁盘上的资源或 服务

如果该帐户无权 资源,web应用程序将 无法使用该资源

模拟是网络的关键所在 应用程序假定一个不同的 默认设置中的标识

可以将模拟配置为 用于上的web应用程序 通过添加标记启动 到web.config文件。模仿 也可以在中动态实现 代码,以便可以打开和 根据需要关闭

因此,请检查web.config和IIS配置,并确保您模拟的是正确的用户

Web应用程序以特定的方式运行 身份,此身份基于 本地计算机上的用户帐户或 域名

应用程序使用此标识 当它访问磁盘上的资源或 服务

如果该帐户无权 资源,web应用程序将 无法使用该资源

模拟是网络的关键所在 应用程序假定一个不同的 默认设置中的标识

可以将模拟配置为 用于上的web应用程序 通过添加标记启动 到web.config文件。模仿 也可以在中动态实现 代码,以便可以打开和 根据需要关闭


因此,请检查您的web.config和IIS配置,并确保您模拟的是正确的用户。

因此,为了防止异常传播,您甚至不会捕获并记录它们!?酷!您正在模拟ASP.NET帐户。。。不是当前用户帐户。您的身份验证模式是什么?您在web.config上有特定的模拟版本?@Davide:我想这是一个示例代码。。。检查这里:,这里和这里是源代码:所以为了防止异常传播,您甚至不捕获并记录它们!?酷!您正在模拟ASP.NET帐户。。。不是当前用户帐户。您的身份验证模式是什么?您在web.config上有特定的模拟版本?@Davide:我想这是一个示例代码。。。检查此处:,此处和此处是源: