利用,但不公开API(AngularJs / NodeJs)

时间:2016-02-05 21:00:54

标签: angularjs node.js api

我有一个消耗API的AngularJs应用程序。我用StrongLoop

制作了这个API

我想要的是什么:

  1. 能够通过AngularJs控制器使用API​​。
  2. 不将API端点公开给用户。
  3. 现在我想我会以某种方式使用Node来实现这一点,我使用AngularJS查询本地站点URL并让Node处理路由和身份验证令牌,但是什么阻止用户使用我的本地URL获取结果?

2 个答案:

答案 0 :(得分:4)

  

我希望我的网站使用API​​,但如果用户自己导航,则不会向用户提供结果

在HTTP级别上就是这样,,两者之间没有区别。

现在您可以实施一个身份验证和授权系统。身份验证标识客户端/用户,授权决定给定用户是否可以执行给定操作。

要实现上述目标,请参阅StrongLoop的Authentication, authorization, and permissions

公共API

如果AngularJS控制器(Web客户端)可以访问API,则假设用户可以通过“将API URL放在浏览器中”来访问它。没有办法解决这个问题,两者都是API的有效客户。

如果您需要管理权限,请不要依赖客户端来阻止用户这样做,而是依赖服务器端。

客户端的权限仅适用于良好的用户体验(用户体验,例如隐藏按钮以禁止用户执行操作)。

API本身不信任任何客户。

内部API

保护公共API后,您可能拥有内部API,只能侦听来自node.js应用程序的请求,以提供特定服务,例如

public clients (ng-app, web browser) ---> public API (node.js) ----> internal API

在这里,您可能有内部API完全信任请求来自您的node.js应用程序,因为公共API已经处理了权限,只能通过安全操作调用内部API。

答案 1 :(得分:0)

我认为我们需要更多信息来确定您正在尝试限制访问的内容。

如果您只想将API中公开的数据限制为应用程序所需的数据,MVVM pattern可能是一个很好的候选者(我对StrongLoop不太熟悉,知道这是否是一个选项。)< / p>

否则,如果您需要严格限制对StrongLoop API的访问权限,以便只有您的服务器可以访问它,那么Repository Pattern将是一个很好的选择。