2

我们有一些调用 WCF 服务来访问数据的应用程序(Web 和 WPF)。我们没有使用 Windows 身份验证。登录到 Web 应用程序或 WPF 桌面应用程序时,系统会提示用户输入用户名和密码。数据不是高度机密的(即没有信用卡、SSN 等)。

我们想为 WCF 端点使用 BasicHttpBinding。但是,我们希望将用户名和密码传递给我们的 WCF 服务,以便我们可以根据用户限制对某些数据的访问。

我的问题是,既然我们 100% 处于 Intranet 环境中,那么在 SOAP 消息的标头中简单地传递用户的用户名和密码以便我们可以在 WCF 端对用户进行身份验证是否合理?这似乎是一种非常常见的情况,我很好奇当所有应用程序和服务都驻留在 Intranet 环境中时,其他人如何解决 WCF 端的安全问题。

谢谢。

4

4 回答 4

2

这看起来很容易,但实际上很难,因为 WCF 团队已经决定不允许通过不安全的通道发送纯文本用户名令牌。您始终可以在自定义 SOAP 标头中发送用户名和密码,但在这种情况下,您将失去 WCF 安全基础设施,您将不得不注入自己的密码验证行为等。

如果你真的需要纯文本用户名令牌,你应该检查这个绑定

编辑:顺便说一句。请记住,大多数安全攻击来自内部人员,因此使用 HTTPS 是一个不错的决定,它会让事情变得更容易。

于 2010-08-17T20:39:07.167 回答
1

是的,这是合理的——但是:您应该加密密码,即使您在 Intranet 上。任何使用网络嗅探器(例如 WireShark)的人都可以看到通信的文本,如果您没有加密密码,那么即使他们是员工,他们也将能够获得密码——完全击败任何内部安全措施—— - 也就是说,除非你非常信任你的员工,以至于用户名和密码真的没有任何意义,无论如何。

于 2010-08-17T20:31:08.973 回答
1

如果您使用 wcf 3.5 sp1,您可以通过非安全绑定允许用户名和密码,只需将安全传输的AllowInsecureTransport设置为 true。

于 2010-08-18T15:03:30.067 回答
0

密码永远不应以纯文本形式发送。有些人对不同的事情使用相同的密码。窃取某人的密码可能会导致严重的身份盗用,即使您的应用程序永远不会受到损害(受害者甚至不会知道泄漏的来源)。

密码被散列是有原因的——即使计算机也不应该知道你的密码

于 2010-08-17T21:16:25.533 回答