2012-03-21 91 views
0

我也不相信 - 我会向任何有兴趣的人展示加入我!VIsual Studio 2010保留到WCF服务参考密码?

这是交易。两台计算机与添加服务引用的行为不同。

计算机1 - 我会打电话给他BigMac
电脑2 - 我会打电话给他Littlemac

我写了一篇关于BigMac的Web服务。和一个Windows客户端应用程序来调用它。所有作品都很棒。部署到客户端的计算机,所有工作都很好。我们决定保护服务器,以便消费者必须将Windows用户名/密码传递给服务,我们将使用Https。 8小时后,在这里和其他地方进行了大量搜索,我找到了答案。服务器配置。看起来像这样:

<services> 
    <service name="SecureWcfTestsApplication.Service1"> 
    <endpoint address="" 
     binding="basicHttpBinding" 
     bindingConfiguration ="Binding2" 
     contract="SecureWcfTestsApplication.IService1" /> 
    </service> 
</services> 
<bindings> 
    <basicHttpBinding> 
    <binding name="Binding2"> 
     <security mode="Transport"> 
     <transport clientCredentialType="Windows" /> 
     </security> 
    </binding> 
    </basicHttpBinding> 
</bindings> 

将其部署到远程服务器上。转到任何Web浏览器,输入服务URL,输入用户名和密码,然后获取服务描述。都好。

但是 - 客户端代码可以调用它而不提供任何凭据。

客户端代码仅仅是这样的:

remote.Service1Client服务1 =新remote.Service1Client(); service1.GetData(20);

就是这样。它从Visual Studio中运行,并作为exe。如果我将exe复制到另一台机器上,它不会运行。

好的 - 在BigMac(同一台计算机)上开始一个新项目 - 这里没有服务实现只是一个Windows应用程序。我添加了远程服务引用,但它又不要求输入用户名和密码。我可以在没有任何凭证的情况下致电该服务。

转到LittleMac。打开网页浏览器并导航到服务 - 我需要一个用户名/密码。打开Visual Studio,添加服务引用 - 我需要用户名/密码。客户端代码需要设置用户名/密码。

我重新启动BigMac - 从头开始​​ - 新项目 - 添加Web引用 - 不需要密码并且运行。

Wtf?任何人?

最佳

回答

0

假设:你没有Windows域。

好吧,让我们考虑一下“Windows”身份验证的含义。从here

Windows身份验证

的服务通常使用Kerberos时,在Windows域服务器可用,或在NTLM工作组配置部署时。调用者使用其Windows凭据(如票证或令牌)提供该服务,并且该服务会对Windows进行身份验证。

现在,假设您的网络中没有域,这意味着它实际上是在运行Visual Studio的本地帐户以及BigMac上的client.exe执行身份验证。由于您的本地帐户已经过身份验证(您已登录),客户端只需将令牌转发给Web服务即可对其进行身份验证。

另一方面,LittleMac在另一台机器上进行本地身份验证,这意味着它必须为运行Web服务的计算机上的本地帐户提供用户名和密码。

我不知道这是不是你的情况,我的描述可能不是100%真实的背景发生了什么,但在任何情况下,WCF都没有保留密码,所以不要担心:)

HTH

+0

嘿 - 感谢有它刺伤。如果你所说的是正确的 - 有没有什么办法可以“解密”这台计算机,因为这实际上可能会导致一些问题呢?在这台机器上,我忘记在代码中设置凭据,但无论如何它都能正常工作。但是它在部署时不起作用,会吗? – RBrowning99 2012-03-22 17:15:48

+0

我不知道你是否能够避免自动认证,因为WCF没有问你为你做。不,如果您将它部署到另一台计算机上,它将无法正常工作,正如您在另一台计算机上部署它时看到的那样。 – 2012-03-22 21:35:37

+0

再次想到,您可以尝试将ClientCredentialType设置为“密码”(请参阅​​http://msdn.microsoft.com/zh-cn/library/ms733836.aspx),那么理论上它应该会询问您的凭据,即使您已经通过身份验证。我很抱歉,但我现在没有时间去尝试。 – 2012-03-23 08:09:57