javascript - 当客户端可以是 Javascript 客户端时的 WCF 服务安全性

标签 javascript .net wcf rest wcf-security

如何保护可由 Javascript 客户端使用的 WCF 服务?有具体的安全模型吗?

据我了解,WCF 支持使用传输和消息安全性对线路数据进行加密。但 WCF 仍然不完全安全,因为任何人都可以使用该服务(缺少身份验证)。只有“来回”移动的数据通过 channel 进行加密。这还不够。因此,我们引入了相互身份验证并选择证书作为凭证。客户端需要做的是:随着所有 SOAP 请求,他应该发送一个有效的证书(客户端凭证也包含公钥和私钥,并由 WCF 管理员颁发),该证书是由我的服务器信任的 CA 颁发。

我们使用 basicHttpBinding 因为我们的客户端可以是 Javascript/Ipad/.Net/DBL 客户端。我们能够使用.Net/SOAPUI/JAVA 客户端来使用此类服务​​。所以我们很擅长这种方法。

但是今天在分析过程中,我们发现 JavaScript 客户端无法使用我们的服务,因为它不支持相互身份验证(如果我错了,请纠正我)。即使它支持相互身份验证并向服务器发布有效的证书,我们也无法让所有客户端(Web 浏览器)提供客户端证书,因为它还包含公钥和私钥(请注意私钥!!)我的服务器盲目信任它。

现在我有点困惑。有人可以建议一些由 JavaScript 支持且没有任何安全隐患的安全模型吗?类似于 RESTful WCF 之类的东西。

据我了解,JavaScript 不支持消息安全性,仅支持传输安全性。我不关心数据如何通过网络加密。我关心的是客户端如何通过我的 WCF 服务进行身份验证。

非常感谢

最佳答案

如果您已在网站上使用表单例份验证,则可以通过将 AspNetCompatibilityRequirementsMode 启用为“必需”,利用 ASP.NET pipline 来检查 FormAuthentication Cookie。更多详细信息可以在这个SO thread中找到

如果您的服务是独立服务,并且它只是被您没有任何控制权的不同客户端使用,那么您可以使用 oauth 身份验证,其中将有一个消费者 key ,该 key 将共享给所有经过身份验证的客户端。调用者将使用此 key 签署一些信息,服务器也将使用相同的 key 对其进行签名,然后进行比较。有关实现细节,请查看此 excellent article

关于javascript - 当客户端可以是 Javascript 客户端时的 WCF 服务安全性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11662680/

相关文章:

c# - 为什么 DataMemberAttribute 需要对 bool 属性进行特殊处理

c# - 为什么我通过 WCF Resful 服务在 "405 Method not allowed"操作上收到 "Put"错误?

javascript - 在滚动页面时为 div 设置动画

javascript - 使用javascript从单元格中检索id

c# - 事件冒泡和 MVP : ASP. NET

c# - 构造函数是否可以包含确定调用哪个其他构造函数覆盖的逻辑?

javascript - 如何在自动放大表单后触发 iPhone 缩小?

javascript - 抓取附加到 div 元素的 css 属性

c# - 如何获取 Windows 8 Live ID

c# - 通过配置进行 WCF 模拟