【问题标题】:Impersonating a user over a website which calls a WCF通过调用 WCF 的网站模拟用户
【发布时间】:2011-09-26 17:18:39
【问题描述】:

我的服务是一个 netTCP 网络服务,连接到它的网站是一个经过 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 服务的大师,所以我认为我在这方面的知识有限。如果你们有任何想法或建议,请告诉我。

【问题讨论】:

    标签: c# wcf security asp.net-mvc-2 impersonation


    【解决方案1】:

    看来您遇到了以下问题。我认为这与机器 B 不信任机器 A 传递其凭据有关。这以不同的方式表现出来。

    您需要通过执行以下操作(更多 here)在 Active Directory 中将受限制的机器 A 更改为信任机器 A 以进行 kerberos 凭据委派

    • 依次单击“开始”、“管理工具”和“Active Directory 用户和计算机”。
    • 展开域,然后展开 Computers 文件夹。
    • 在右窗格中,右键单击 Web 服务器的计算机名称,选择“属性”,然后单击“委派”选项卡。
    • 单击以选择信任此计算机以委派给任何服务(仅限 Kerberos)。
    • 点击确定。

    在我看来,问题的症结在于,虽然机器 B 接受了请求,但它不相信机器 A 会传递信用。这似乎是经典的双跳问题。这很典型,尤其是在为未委托的计算机使用 SQL Server 时,您会看到如下错误:用户“(null)”登录失败。原因:未与受信任的 SQL Server 连接关联。无论如何,SQL 在这里不是你的问题,只是作为一个例子来展示,因为我之前已经打过那个。我不了解最新的 Win2k8 更改,但也可以在更精细的级别授予委派权限。 同样在虚线下方的图片中,我的意思是说“机器 B 必须信任机器 A 才能通过信用”

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-10-17
      • 2010-11-07
      • 2010-11-17
      • 2011-05-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多