考虑在我的网站上构建一个Angular 2前端。我的问题不一定与Angular有关,但我想提供完整的背景。
向用户显示内容的应用程序逻辑将转移到客户端。所以在服务器端,我需要通过RESTful JSON提要来公开数据。令我担心的是,有人可以完全绕过我的前端并使用各种参数执行对服务的请求,从而有效地刮取我的数据库。我意识到通过抓取HTML可以实现这一点,但是使用格式良好的数据公开服务只是一个简单的事情。
有没有办法保护RESTful服务?换句话说,有没有办法确保这样的服务只响应我的Angular 2应用程序调用?身份验证当然不是一个解决方案 - 我不想强迫访问者进行身份验证,无论如何刮刀都可以很好地进行身份验证和访问。
答案 0 :(得分:1)
我知道没有明显的方法可以做到这一点,但很多人似乎都把亚马逊S3看作一个模型。如果您在客户端代码中放置凭据,那么获取客户端代码的任何人都可以看到它们。我可能会建议您编写服务器以使用客户端代码将时间限制令牌传递回浏览器。客户端代码需要将其传递回服务器以进行访问。这可以防止任何人编写自己的客户端代码,因为只有服务器发送的客户端代码可以工作,但只是在一段时间内。用户可能偶尔会遇到超时,但这取决于您希望进行令牌超时的严格程度。当然,即使是这样的事情也可能被某个客户请求获取令牌副本以便与他们自己的客户端API一起使用而被黑客入侵,但此时您应该为有人在努力使用您的API而感到自豪!我没有试过写这样的东西,所以我对这个问题没有任何实际经验。我自己也对此感到疑惑,但也没有足够的经验来研究这个架构,看看其他人在做什么。 angularJS论坛提出了什么建议?
答案 1 :(得分:1)
我会推荐JWT授权。其中一个实现是OAuth。基本上你得到一个json网络令牌(JWT),它由你信任的权威人士签名,告诉用户以及他们可以在你的api上访问哪些资源。
如果请求中不包含授权令牌,您的API会拒绝该请求。
如果在授权机构签署令牌后某人试图授予自己权限,则令牌已被篡改 - 您的API拒绝它。
这是一个非常酷的工具包。
此site包含有关不同语言的OAuth实施的信息,希望列出您的最爱。
一些轻床时间reading。
答案 2 :(得分:0)
I believe the answer is "No".
You could do some security by obscurity type stuff. Your rest API could expose garbled data and you could have some function that was "hidden" in your code un-garble it. Though obviously this isn't fool proof, but if you expose data on a public site it's out there regardless of server or client rendering.