如何保护Javascript客户端可以使用的WCF服务?这个的任何特定安全模型?
据我所知,WCF支持使用传输和邮件安全加密数据。但是WCF仍然不安全,因为任何人都可以使用该服务(缺少身份验证)。只有“来回”的数据通过频道加密。这还不够。因此,我们引入了相互身份验证并选择了证书作为cridentials。客户端需要做的是:除了所有SOAP请求,他还应发送有效证书(客户端cridential包含公共和私有密钥,并由WCF管理员发布),这是由我的服务器信任的CA发布。
我们正在使用basicHttpBinding,因为我们的客户端可以是Javascript / Ipad / .Net / DBL客户端。我们可以使用.Net / SOAPUI / JAVA客户端来使用这些服务。所以我们对这种方法很满意。
但今天在分析期间,我们发现JavaScript客户端无法使用我们的服务,因为它不支持相互身份验证(如果我错了,请纠正我)。即使它支持相互身份验证并将有效证书发布到服务器,我们也无法为所有客户端(Web浏览器)提供客户端证书,因为它还包含Public和PRIVATE密钥(请注意PRIVATE KEY WELL !!)和我的服务器盲目信任。
现在我有点困惑。有人可以建议一些JavaScript支持的安全模型,而不会有任何安全性损害。像RESTful WCF之类的东西。
我知道JavaScript不支持Message Security,它只支持Transport Security。我不在乎如何通过网络加密数据。我关心客户端如何通过我的WCF服务进行身份验证。
非常感谢
答案 0 :(得分:2)
如果您已经在为网站使用表单身份验证,则可以通过启用AspNetCompatibilityRequirementsMode为Required来利用ASP.NET pipline检查FormAuthentication Cookie。有关详细信息,请参阅此SO thread
如果您的服务是独立服务,并且它只是由您无法控制的不同客户端使用,那么您可以使用oauth身份验证,其中将存在将与所有经过身份验证的客户端共享的使用者密钥。调用者将使用此密钥签署一些信息,服务器也会使用相同的密钥对其进行签名,然后进行比较。有关实施细节,请查看此excellent article
答案 1 :(得分:0)
哦,我明白了......我正在研究tou即OAuth建议的组件上的R& D ...到目前为止我能做的是:通过SSL公开webHttpBinding端点,我的javascript客户端可以调用SSL使用$ Ajax使用JSONP安全服务...这意味着频道已加密..现在我只需要在WCF中应用OAuth ...你能指导一下Javascript客户端如何理解OAuth吗?我的意思是我从这里下载了OAuth的服务器代码(http://oauth.googlecode.com/svn/code/csharp/OAuthBase.cs)但是如何使用javascript调用这样的服务?我在这一点上做了R& D,并且如果我得到任何反对者,我会发布。
这是我的REST WCF over SSL配置希望它可以帮助某人:
<?xml version="1.0"?>
<configuration>
<system.web>
<compilation debug="true" targetFramework="4.0" />
</system.web>
<system.serviceModel>
<bindings>
<webHttpBinding>
<binding name="jsonpSsl" crossDomainScriptAccessEnabled="true">
<security mode="Transport" />
</binding>
</webHttpBinding>
</bindings>
<behaviors>
<serviceBehaviors>
<behavior name="JsonServiceBehaviors">
<serviceDebug includeExceptionDetailInFaults="true" />
<serviceMetadata httpsGetEnabled="true"/>
</behavior>
</serviceBehaviors>
<endpointBehaviors>
<behavior name="webHttpBehavior">
<webHttp />
</behavior>
</endpointBehaviors>
</behaviors>
<services>
<service name="WCFTransportSecurity.TransportSecurityService" behaviorConfiguration="JsonServiceBehaviors">
<endpoint address="" binding="webHttpBinding" bindingConfiguration="jsonpSsl" contract="WCFTransportSecurity.ITransportSecurityService" behaviorConfiguration="webHttpBehavior"/>
</service>
</services>
</system.serviceModel>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"/>
</system.webServer>
</configuration>
这是对服务的JQuery AJAX调用(希望它可以帮助某人)
$.ajax(
{
type: "GET",
data: "{}",
contentType: "application/json; charset=utf-8",
dataType: "jsonp",
url: "https://localhost/WCFTransportSecurity/TransportSecurityService.svc/getdata/" + $("#TextBox1").val(),
success: function (a) { $("#lblResponse").text(a); },
error: function (a) {$("#lblResponse").html("Error while Processing: Error Code: " + a.status + "<br/>and Error Message: <span style='color:red'>" + a.statusText + "</span>"); }
});