我有WCF服务,它检查目录是否存在Directory.Exists方法(此目录位于网络服务器上)。之后它会做一些随机的事情。此服务使用客户端模拟。我已经测试了它并使用WindowsIdentity.GetCurrent()。名称显示正确的用户名。我的客户端应用程序是简单的控制台应用程序。
所以我的问题是,当我使用凭据A从计算机A调用在计算机A上运行的服务时,它可以工作。如果我使用凭据A或B(或其他任何其他内容)从计算机B调用它,它将不再起作用。 Directory.Exits返回false。但是,用户A和B都拥有访问/修改此目录的所有权限。
请注意,目录位于计算机C上。出于调试原因,我返回当前用户身份名称,它始终是应该的名称。显然,如果客户端应用程序与服务位于同一台计算机上,则Directory.Exits的凭据不会被传递。
欢迎任何帮助或想法。
答案 0 :(得分:1)
您期望凭据应该通过第二个" hop"错误 - 服务器无法使用常规Windows身份验证将模拟传递给另一台服务器。
为什么你看到A-> A-> C正在工作 - 你的凭据不会离开你最初登录的盒子(A),而且还有一个" hop"到C来检查那里的文件系统。
A-> B-> C案例不起作用,因为" hop"在A-> B部分期间,用于在B上进行模仿,因此用于B-> C您的凭证不再可以使用。
常见修复:
进一步阅读 - 搜索"NTML one-hop"或"double-hop authentication in Windows"以查找http://blogs.msdn.com/b/knowledgecast/archive/2007/01/31/the-double-hop-problem.aspx等文章
答案 1 :(得分:0)
然后你可以遵循这个(它可能是一个Kerberos问题):
http://blogs.msdn.com/b/distributedworld/archive/2012/04/24/troubleshoot-kerberos-in-wcf.aspx
它可能有点旧,但我记得过去有同样的问题。