我已经启动并运行了一个WCF服务,并且能够使用basicHttpBinding在该服务和.Net 2.0客户端之间进行通信。
我现在需要锁定WCF服务,以便它只能由经过身份验证的客户端调用。
我可以控制将调用我的服务的客户端。这些客户端是一个产品的一部分,该产品将安装在野外,并“给家里打电话”,以推送和拉取数据。客户端应用是为.Net 2.0框架编写的,目前无法升级到3.0或3.5。我无法将windows用户帐户添加到客户端计算机。
我有哪些选项来保护WCF服务并能够从我的.Net 2.0客户端进行身份验证?此外,数据还需要通过https传递。
我一直在网上搜索,感觉就像在做一场徒劳无功的追逐。
发布于 2008-10-24 08:31:54
可以将WCF终结点配置为使用双向SSL身份验证。这意味着您可以要求客户端在向服务发出请求时提供确认其身份的X.509证书。
在服务器端,您可以使用WCF中的一个内置验证方案,或者提供您自己的验证逻辑来检查X.509证书。
如果您在IIS中托管您的服务,那么将SSL配置为需要transport-level.中的客户端证书是很容易的。但是,您可以在以下位置找到如何在自托管WCF服务中实现此行为的很好指南:
http://leastprivilege.com/2007/08/25/certificate-based-authentication-and-wcf-message-security/
我自己还没有尝试过这一点,但是,由于这在message-level,上创建了一个安全需求,我认为您将不得不使用wsHttpBinding来在您的WSDL契约中强制执行它,因为强加安全需求来访问web服务是WS-*标准的一部分。
如果您必须使用basicHttpBinding,,您可以尝试此解决方案,它将在传输层上移内容:
http://leastprivilege.com/2007/08/26/certificate-based-authentication-and-wcf-mode-independent/
希望这能有所帮助
发布于 2008-10-24 10:56:24
好的,有了SSL,您就有了传输级别的安全性;这很好,它可以保护消息不被嗅探和更改。
现在您有了选择;您是否需要静默验证,或者是否可以在程序启动时提示用户输入用户名/密码?如果它必须是静默的,那么您可以使用前面提到的客户端证书(尽管这很痛苦,但您需要自己生成证书并对其进行验证,因此您需要考虑运行自己的证书颁发机构)。或者,您可以在包含客户端ID的消息中嵌入一个自定义标头,并以杂乱无章的方式完成此操作。
但是,如果您可以提示输入用户名和密码,那么您可以通过这种方式进行身份验证,并使用custom authenticator或甚至使用ASP.NET membership database将其插入到数据库查找中。
发布于 2009-06-01 20:48:21
这是我最终做的事情,在我们的情况下,这似乎是最简单的解决方案,规模相当小,只公开了少数几个web服务:
希望这能帮助一些人..。
https://stackoverflow.com/questions/232500
复制相似问题