【问题标题】:WCF security problemWCF 安全问题
【发布时间】:2009-08-07 02:59:49
【问题描述】:

我有一个应用程序可以访问托管在控制台应用程序中的服务器上的 WCF 服务。我没有问题,当我尝试从另一台服务器上的控制台应用程序访问另一项服务时,我遇到了问题。

我正在使用 TCP 进行连接,并且我正在使用所有默认安全值。

所以我从 A->B 出发,然后它从 B->C 出发。请注意,当我刚从 A->C 出发时,一切都很好

错误: “对 SSPI 的调用失败”...“目标主体名称不正确”...堆栈跟踪...

当我打印出来时在 B
Console.WriteLine(ServiceSecurityContext.Current.PrimaryIdentity.Name); Console.WriteLine("ServiceSecurityContext.Current.WindowsIdentity.Name);
我可以看到这是我的 Windows 登录,这很好

因此,当它从 B->C 发出时,它似乎没有传递我的凭据

有什么想法吗?

【问题讨论】:

    标签: c# .net asp.net wcf


    【解决方案1】:

    SSPI 表明您正在使用 Windows 身份验证。

    您是否为域中的服务 C 创建了安全的主体名称?谷歌setspn命令。问题是 Windows 不会将证书从域传递到不受信任的系统。您可以通过在域中提供安全主体名称来信任它,然后允许传递令牌。

    Secure Principal Name SPN Creation Tutorial

    【讨论】:

    • 正如 Spence 提到的,这是因为凭据从 A 移动到 B,但从 B 到 C 的相同凭据无效,因为它与当前运行的 AppDomain 匹配,而不是 B到C
    【解决方案2】:

    您遇到了所谓的双跳问题。 http://blogs.msdn.com/knowledgecast/archive/2007/01/31/the-double-hop-problem.aspx.
    解决方案通常是使用 Kerberos 身份验证,正如 Spence 所说,这涉及到诸如 SPN 之类的东西。

    【讨论】:

    • 这正是我遇到的。我会用一整杯咖啡深入研究这个,等待灯泡的时刻。谢谢!
    猜你喜欢
    • 2010-12-24
    • 2012-03-08
    • 1970-01-01
    • 2011-07-17
    • 2011-11-05
    • 1970-01-01
    • 2012-05-29
    相关资源
    最近更新 更多