Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么可以';我不能在远程计算机上使用模拟打开文件吗?_C#_.net_Wcf_Security_Impersonation - Fatal编程技术网

C# 为什么可以';我不能在远程计算机上使用模拟打开文件吗?

C# 为什么可以';我不能在远程计算机上使用模拟打开文件吗?,c#,.net,wcf,security,impersonation,C#,.net,Wcf,Security,Impersonation,我有一个用C#编写的WCF服务,托管在远程机器上,作为本地管理员帐户运行。从以active directory用户身份登录的计算机上,我发送了一个命令,该命令只告诉它在网络上打开一个文件。我有权访问该文件,但主机上的管理员帐户没有权限。我正在需要模拟的方法上使用[OperationBehavior(Impersonation=ImpersonationOption.Required)]元标记,并且已正确设置凭据类型和安全模式。我可以通过比较Windows标识来验证帐户是否确实试图被模拟,但我仍然

我有一个用C#编写的WCF服务,托管在远程机器上,作为本地管理员帐户运行。从以active directory用户身份登录的计算机上,我发送了一个命令,该命令只告诉它在网络上打开一个文件。我有权访问该文件,但主机上的管理员帐户没有权限。我正在需要模拟的方法上使用[OperationBehavior(Impersonation=ImpersonationOption.Required)]元标记,并且已正确设置凭据类型和安全模式。我可以通过比较Windows标识来验证帐户是否确实试图被模拟,但我仍然得到一个访问被拒绝的异常。我认为这与active directory没有对模拟用户进行身份验证有关。我缺少什么吗?

您可能还需要设置从web服务器到文件服务器的委派。这将允许文件服务器信任web服务器已验证的凭据。有关如何为应用程序设置委派的信息,请参阅本节,特别是有关配置AD的部分。

您正在进入Kerberos安全和两跳身份验证的域。
您有两个选择:

  • 服用红色药丸:试着让两个啤酒花的身份验证生效。确保您至少有一个Windows Server 2003域,所有计算机之间的时间正确同步,并为特定用户/计算机帐户设置正确的委派。如果你真的“幸运”,你就必须用SetSPN配置spn

  • 服用蓝色药丸:忘记两次跃点身份验证,在具有足够权限的帐户下模拟WCF服务,并在前面的步骤中检查授权

请原谅我的沮丧,但我确实认为我在这个话题上的短暂经历让我付出了至少10年的生命。我不愿意看到其他人也这样。无论如何,如果你感到勇敢,这篇文章应该给你足够的谷歌关键词


事件日志和网络监视器对于调试非常有用…

只是一个想法。。。模拟就足以做到这一点吗?我真的希望是这样,我能想到的另一种让文件传播开来的方法是序列化它们。我可能能够获得一个虚拟帐户,它可以运行,但是…这实际上是一个托管应用程序场景,尽管我认为可能AD服务器不允许模拟?@MGS您的web服务器必须得到AD的信任,才能代表用户进行委托。如果它不可信,它就不会工作。我使用委托建立WebDAV,没有太多麻烦。可能是因为我们已经在服务器2003域中,我有一大群Windows管理员来进行实际配置。这已经变得比必须的麻烦多了,我同意,我不想处理Kerberos身份验证。看起来我们正在采取简单的方法,创建一个具有有限访问权限的特定于应用程序的用户。