保护客户端Web服务的策略

时间:2014-06-13 14:19:21

标签: javascript jquery ajax json wcf

我在WCF的一个页面(100%客户端堆栈)上由$.ajax({ url: 'service.svc?a=1', dataType: "JSONP", ...})调用mysite.com服务。我想限制服务使用只限于mysite.com用户,是否可以这样做,如果是这样的话?

我现在唯一的想法是引入'via'参数,这有助于我了解通过哪个www访问我的服务。

P.S。我真的很难想出一个好头衔,请随意改变它!

5 个答案:

答案 0 :(得分:3)

我们已经开发了一个基于Web的工具,我们通过WCF服务消费数据,但我们不直接使用WCF服务,因为它是REST服务,我们还没有在服务中实现任何安全性。所以,呼叫服务的方式不同。

1)我们在同一个项目中创建了一个不同但必需的处理程序文件

2)此处理程序文件调用我们的WCF服务

3)由于我们的工具是基于网络的,所以我们在调用处理程序

时检查会话ID

4)如果会话ID匹配,那么我们传递数据,否则我们会显示会话过期消息

如果你仍然不清楚这个概念,请告诉我。

答案 1 :(得分:2)

假设您不想强迫访问者首先登录/验证:您无法。

为了能够限制某些用户群的使用(在你的情况下是mysite.com的访问者),用户需要向你的服务发送一些东西(密钥,密码,令牌)来识别自己。如果您将此令牌存储在客户端应用程序(例如,javascript)中,则人们可以提取令牌并以他们喜欢的方式使用它。所以这是不可能的。你也不信任浏览器发送的任何数据(例如通过param),因为它总是可以用简单的工具伪造。这些都是你拥有的所有选择。

真正的问题是,如果已经通过网站公开提供此内容,您为什么要保护这些内容?如果他们愿意,可以轻松地构建一个简单的刮刀来获取您的内容。

答案 2 :(得分:1)

如果您在IIS上托管应用程序,您只需添加到web.config:

<system.webServer>
  <httpProtocol>
    <customHeaders>
      <add name="Access-Control-Allow-Origin" value="*" />
      <add name="Access-Control-Allow-Methods" value="GET, POST" />
    </customHeaders>
  </httpProtocol>
</system.webServer>

对于Access-Control-Allow-Origin,您可以设置应用程序地址:Access-Control-Allow-Origin:http://domain1.comhttp://domain2.com

<system.webServer>
  <httpProtocol>
    <customHeaders>
      <add name="Access-Control-Allow-Origin" value="http://domain1.com" />
      <add name="Access-Control-Allow-Methods" value="GET, POST" />
    </customHeaders>
  </httpProtocol>
</system.webServer>

您还可以达到目标,编写为每条消息添加特定标头的行为。以下是指南:http://blogs.msdn.com/b/carlosfigueira/archive/2012/05/15/implementing-cors-support-in-wcf.aspx

有一个常量CorsConstants.Origin,您可以设置您的域名。

要检查响应是否需要标题,您可以使用fiddler。

答案 3 :(得分:1)

您可以对用户进行身份验证并生成一个带有过期时间的令牌。将该令牌放入带有身份验证用户的数据库中,然后将该令牌与每个服务请求一起发送给用户授权。

答案 4 :(得分:1)

虽然除非您实施经过审核的用户帐户,否则原则上您无法制定100%防弹解决方案,这是我用来阻止服务器上的热链接的方法。它不是关于引用者的。

我的服务器为某些文件实现了ETag标头和304 Not Modified标头,否则这些文件就足以满足定时缓存的需要。这是为了节省带宽,仍然可以看到访问的内容。然后,在服务器端跟踪用户到目标的路由。如果达到了里程碑,则为用户提供credit以访问昂贵的资源。积分可以添加,以便同时访问将起作用。 除此之外,我还在路由期间将cookie设置到用户的浏览器并稍后进行测试。如果假冒的客户完全了解它们,那么假冒的客户就会非常糟糕。

请记住,没有完美的解决方案,但我相信如果你实现这一点,你的服务器就不会超载。我应该知道,99%的请求都被盗了,这个过滤工作正常!