【问题标题】:Calling a web service from Javascript从 Javascript 调用 Web 服务
【发布时间】:2011-08-09 07:18:51
【问题描述】:

在从 javascript 调用 Web 服务时添加身份验证/安全性的最佳方法是什么?
我希望我的 Web 服务只能从我的应用程序中调用,其他任何人都不能通过将 Web 服务 URL 复制到浏览器中来访问我的 Web 服务。

从最初的几个答案看来,这几乎是不可能的。
那么我应该怎么回复我的客户,因为他不知道“不可能”这个词?

~阿金奇亚。

【问题讨论】:

  • 盐、令牌、密码?您能否详细解释一下您是如何访问“服务”的?
  • @Calumn:我正在使用我的网络服务进行 YUI 自动完成。我只是提供我的网络服务 URL 到 YUI 自动完成。

标签: javascript web-services security authentication


【解决方案1】:

看看使用同步器令牌模式,以便只能使用加载服务引用的页面已知的一段数据来使用服务。在OWASP Top 10 for .NET developers part 5: Cross-Site Request Forgery (CSRF) 中有一个使用 Web 服务执行此操作的示例。这应该可以实现您所追求的。

【讨论】:

  • 听起来不错。会检查并通知您。
【解决方案2】:

这是不可能的。如果您允许客户端从 JavaScript 访问您的 Web 服务,客户端将始终能够这样做。您只能通过使用某种约束来减少访问,例如需要与请求一起发送的令牌以对其进行身份验证。您甚至可以将其变成一次性令牌。但这会产生新的问题(例如,如果答案丢失会发生什么情况。客户端 javascript 无法重新运行查询)。

【讨论】:

  • @nfecher : 有什么方法可以通过将 Web 服务 URL 复制到浏览器中来阻止任何人访问服务?
  • 不,不是。此外:因为您完全允许客户端访问网络服务,所以任何此类预防措施都只会是snake oil
  • 感谢您的建议。是不是意味着通过 JAva 脚本使用的 Web 服务总是可供所有人访问?
  • 在我回答的范围内,我会说:是的。
猜你喜欢
  • 2014-02-12
  • 2015-11-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多