有什么办法保证RESTfulAPI只能被SPA应用使用?

What is the way to ensure that the RESTful API can only be used by the SPA application?

我目前正在使用 Angular 4 和 RESTful API 使用 Symfony 开发 SPA 应用程序。我的应用程序将是 public,也就是说,它不需要通过用户名和密码进行身份验证。

我的问题是这样的。有什么办法保证RESTful API只能被SPA应用使用?有什么方法可以确保只有我的客户端应用程序可以使用 API 并阻止其他访问?

我问这个是因为我不希望其他应用程序能够使用我的 API 来获取数据。

根据定义,您的 API 是 public 的所有意图和目的。任何随机的匿名访问者都需要能够与您的 API 交谈才能使您的网站正常工作。请求将来自任意浏览器。您无法区分请求是否已发送 "in the context of your site";唯一相关的标记是 HTTP Referer,但既不能保证设置也不能欺骗。

考虑一下如果您在 HTML 中以 old-fashioned 方式编写您的网站会发生什么:您的网络服务器将响应 HTTP 请求和 return 打包在 HTML 中的数据。与 SPA 的唯一区别是这些请求是 JSON 或 XML 而不是 HTML,除此之外没有显着差异并且数据与任何其他请求一样 public您用于 public 站点的其他方法。

即使使用某种身份验证令牌在很大程度上也是毫无意义的,因为您的服务器很容易随时向任何人泄露身份验证令牌,因为人们使用该站点根本不需要它们。