我目前正在使用Angular 4和使用Symfony制作的RESTful API开发SPA应用程序。我的应用程序将是公开的,也就是说,它不需要通过用户名和密码进行身份验证。
我的问题是这个。确保RESTful API只能由SPA应用程序使用的方法是什么?有没有办法确保只有我的客户端应用程序可以使用该API并阻止其他访问?
我之所以这样问,是因为我不希望其他应用程序能够使用我的API来获取数据。
答案 0 :(得分:2)
根据定义,您的API是公开的,用于所有意图和目的。任何随机匿名访问者都需要能够与您的API通信才能使您的网站正常运行。请求将来自任意浏览器。您无法区分请求是否“在您的网站上下文中”发送;唯一相关的标记是HTTP Referer,但既不保证既不设置也不保证。
考虑如果您在HTML中以老式的方式编写站点会发生什么:您的Web服务器将回答HTTP请求并返回以HTML格式打包的数据。与SPA的唯一区别是这些请求是JSON或XML而不是HTML,除了没有显着差异,数据与您用于公共站点的任何其他方法一样公开。
即使使用某种形式的身份验证令牌也毫无意义,因为您的服务器随时都可以向任何人泄露身份验证令牌,因为人们根本不需要使用该站点。
答案 1 :(得分:1)
使用api密钥。 REST API中的每个方法都会使用一个额外的参数,例如, API_KEY
并验证它。 UUID会这样做。您可以使用JWT和每个客户端api密钥,但最简单的解决方案是随每个请求发送的简单api密钥。如果api密钥被泄露,问题就开始了,因为SPA必须使用新密钥。将API_KEY
与https相结合,有助于将此风险降至最低。您可以将API_KEY
作为HTTP标头发送。