C# 通过调用WCF的网站模拟用户

C# 通过调用WCF的网站模拟用户,c#,wcf,security,asp.net-mvc-2,impersonation,C#,Wcf,Security,Asp.net Mvc 2,Impersonation,我的服务是一个netTCP Web服务,连接到它的站点是一个经过windows身份验证的模拟网站。当我尝试点击我的服务时,服务和站点在同一台服务器上,那么这是正确的。当我试图从我的开发机器或本地机器上运行的IIS实例中点击该服务时,它会工作。它唯一不起作用的时候是当我的网站位于该网站的另一台服务器上时。查看WCF实用程序的输出,我们发现一个匿名用户正试图访问我们的服务。但令人疯狂的是,我的用户名显示在服务的右上角 Page.User.Identity.Name 我想我想知道我是否正确地模拟了客

我的服务是一个netTCP Web服务,连接到它的站点是一个经过windows身份验证的模拟网站。当我尝试点击我的服务时,服务和站点在同一台服务器上,那么这是正确的。当我试图从我的开发机器或本地机器上运行的IIS实例中点击该服务时,它会工作。它唯一不起作用的时候是当我的网站位于该网站的另一台服务器上时。查看WCF实用程序的输出,我们发现一个匿名用户正试图访问我们的服务。但令人疯狂的是,我的用户名显示在服务的右上角

Page.User.Identity.Name
我想我想知道我是否正确地模拟了客户。我怀疑它在这些实例上有效,因为当两个应用程序池都在本地计算机上运行时,不需要特定的握手。在我的本地机器上也是如此(不知道为什么,但我想当我从登录机器转到服务器时,可能会有某种隐含的安全性)。 下面是我如何模拟用户

    client2.ChannelFactory.Credentials.Windows.AllowedImpersonationLevel = System.Security.Principal.TokenImpersonationLevel.Impersonation;

我想我的IIS 7 windows 2008安装正确。除了为站点启用windows身份验证外,我还为站点启用了aspnet模拟。我对该服务禁用了除windows身份验证以外的所有功能。我将应用程序池设置为特定id。我不确定我缺少什么。我还没有掌握wcf服务,所以我认为我在这方面的知识有限。如果你们有任何想法或建议,请告诉我。

看来你们有以下问题。我认为这与机器B不信任机器A传递其凭据有关。这表现在不同的方面

您需要通过执行以下操作(更多)在Active Directory中对kerberos凭据委派进行更改,从一台受信任的机器更改为信任机器

  • 单击开始,单击管理工具,然后单击Active Directory用户和计算机
  • 展开“域”,然后展开“计算机”文件夹
  • 在右侧窗格中,右键单击Web服务器的计算机名,选择“属性”,然后单击“委派”选项卡
  • 单击以选择“信任此计算机以委派给任何服务”(仅限Kerberos)
  • 单击“确定”
在我看来,问题的关键在于机器B接受请求,但它不信任机器A传递信任。这似乎是典型的双跳问题。这是典型的,尤其是在为未委派的计算机使用SQL server时,您会看到如下错误:用户登录失败’(null)”。原因:未与受信任的SQL Server连接关联。不管怎样,SQL在这里不是你的问题,只是作为一个例子来展示,因为我之前已经解决了这个问题。我不了解最新的Win2k8更改,但也可以在更精细的级别授予委派权限。 在虚线下方的图片中,我的意思是说“机器B必须信任机器A才能通过认证”