我们有一些应用程序(Web和WPF)调用WCF服务来访问数据。我们没有使用Windows身份验证。登录Web应用程序或WPF桌面应用程序时,系统会提示用户输入用户名和密码。数据不是高度机密的(即没有信用卡,SSN等)。
我们希望将BasicHttpBinding用于WCF端点。但是,我们希望将用户名和密码传递给我们的WCF服务,以便我们可以根据用户限制对某些数据的访问。
我的问题是,既然我们100%在Intranet环境中,那么简单地在SOAP消息的头部传递用户的用户名和密码是合理的,这样我们就可以对WCF端的用户进行认证了吗?这似乎是一种非常常见的情况,我很好奇其他人如何在所有应用程序和服务都驻留在Intranet环境中时解决了WCF方面的安全问题。
感谢。
答案 0 :(得分:2)
这看起来非常简单,但实际上它很难,因为WCF团队已经做出决定,不允许在不安全的通道上发送纯文本用户名令牌。您始终可以在自定义SOAP标头中发送用户名和密码,但在这种情况下,您将失去WCF安全基础结构,并且您必须注入自己的密码验证行为等。
如果您确实需要纯文本用户名令牌,请检查此binding。
编辑:顺便说一下。请记住,大多数安全攻击都来自内部人员,所以使用HTTPS并不是坏事,它会让事情变得更容易。
答案 1 :(得分:1)
是的,这是合理的 - 但是:即使您在Intranet上,也应加密密码。使用网络嗅探器的任何人,例如WireShark,都可以看到通信文本,如果你没有加密密码,那么即使他们是员工,他们也能够获得密码 - 完全击败任何内部安全 - - 也就是说,除非你非常信任你的员工,否则用户名和密码根本就没有任何意义。
答案 2 :(得分:1)
如果您使用wcf 3.5 sp1,您可以在非安全绑定中允许用户名和密码,只需将安全传输的AllowInsecureTransport设置为true。
答案 3 :(得分:0)
密码永远不应以纯文本形式发送。有些人使用相同的密码来处理不同的事情。窃取某人的密码可能会导致严重的身份盗用案件,即使您的申请永远不会受到损害(受害者甚至不知道泄密的来源)。
密码被删除是有原因的 - 即使计算机也不知道您的密码!