模拟在ASP.NET MVC(Impersonation in ASP.NET MVC)

2019-07-17 15:23发布

我在Intranet一个MVC的Web应用程序,并希望能够创造我们的FTP服务器上的文件发送给外部合作伙伴。

用于模拟代码使用WindowsImpersonationContext。

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

StreamWriter sw = System.IO.File.CreateText("PathOnFTPServer");
sw.Write("data");

impersonationContext.Undo();

这里是正在发生的事情和我的问题的原因:

预模拟

User.Identity.Name:我的Windows凭据]

。System.Security.Principal.WindowsIdentity.GetCurrent()名称:NT AUTHORITY \ NETWORK SERVICE

邮政模拟

User.Identity:我的Windows凭据]

GetCurrent.Name:我的Windows凭据]

冒充撤消

User.Identity:我的Windows凭据]

GetCurrent.Name:NT AUTHORITY \ NETWORK SERVICE

所以,我冒充之前,当前用户是系统帐户,但模拟之后,它使用其有权在FTP服务器上创建的文本文件我的Windows域帐户。 代码工作在本地使用Visual Studio的Web服务器,但不是我我们的测试服务器上IIS部署。

我发现了一个拒绝访问错误。 会是什么错误的原因,正确的用户被假冒时?

Answer 1:

模拟允许机器到机器模拟,所以客户端浏览器和服务器都在同一页上,当涉及到的模拟。 当您然后试图访问网络共享,计算机不信任被模拟的凭据。

您需要启用代表团对IIS机器在Active Directory中。 转到Active Directory用户和计算机,找到电脑,单击属性,“信任计算机作为委派”。 (您可能需要重新启动IIS这个工作,我不记得了)。

还有比这一点,我不完全理解的方式更多的理论,但这应该工作。 无论是对是不是别人可以发表评论!

此外,它的工作原理在开发机器上的原因是开发服务器的开发者,而不是(本地)\网络服务运行。


一个体面的链接:

http://msdn.microsoft.com/en-us/library/cc949004.aspx

什么是模拟和代表团之间的区别?

模拟流动原始调用者的身份到后端在同一台计算机上的资源。 代表团流动原始调用者的身份到后端资源不是运行服务的计算机的其他计算机上。

例如,如果某个服务IIS内运行不带模拟,该服务将访问使用ASP.NET帐户资源在IIS 5.0,或网络服务帐户中IIS 6.0。 使用模拟,如果客户端使用原调用者的账户连接,该服务将使用原调用方的帐户,而不是系统ASP.NET帐户访问资源,如在同一台机器上的SQL Server数据库。 代表团是除了SQL Server数据库可能是一个不同的机器是远程的服务类似。



文章来源: Impersonation in ASP.NET MVC