我有一个用 C# 编写的 WCF 服务,托管在远程机器上,以本地管理员帐户运行。从我作为活动目录用户登录的机器上,我发送了一个命令,它只是告诉它在网络上打开一个文件。我可以访问该文件,但主机上的管理员帐户没有。我在需要模拟的方法上使用 [OperationBehavior(Impersonation=ImpersonationOption.Required)] 元标记,并且正确设置了凭据类型和安全模式。我可以通过比较 Windows 身份验证该帐户确实在尝试被模拟,但我仍然收到拒绝访问异常。我认为这与活动目录未对模拟用户进行身份验证有关。有什么我想念的吗?
问问题
1308 次
2 回答
5
您正在进入 Kerberos 安全域和两跳认证域。
你有两个选择:
服用红色药丸:尝试让两跳认证工作。确保您至少有一个 Windows Server 2003 域,所有机器之间的时间正确同步,并为特定用户/计算机帐户设置正确的委派。如果你真的很“幸运”,你将不得不使用 SetSPN 配置 SPN。
采取蓝色药丸:忘记两跳身份验证,在具有足够权限的帐户下模拟 WCF 服务,并在较早的步骤中检查授权。
请原谅我的沮丧,但我确实认为我在这个话题上的短暂经历已经让我失去了至少 10 年的生命。我讨厌看到这种情况发生在其他人身上。无论如何,如果你有勇气的话,这篇文章应该会给你足够的谷歌关键词。
事件日志和网络监视器对于调试很有用...
于 2009-08-11T19:13:23.677 回答
1
您可能还需要设置从 Web 服务器到文件服务器的委派。这将允许文件服务器信任 Web 服务器已验证的凭据。请参阅这篇MSDN 文章,了解如何为您的应用程序设置委托,尤其是有关配置 AD 的部分。
于 2009-08-11T19:05:11.103 回答