为指定的客户端提供一些REST API资源

时间:2014-01-13 15:25:35

标签: api angularjs rest

我认为我们面临的问题没有解决办法,但是为了确认我想在这里问。

我们使用的REST API来自:

  • 管理网站(AngularJS)
  • 客户网站(AngularJS)
  • 其他REST API客户端(自己的API应用程序)

由于管理/客户网站的请求是由AngularJS在客户端进行的,因此用户可以确定(例如通过FireBug)资源URL并能够从他们自己的应用程序中消耗所有这些资源 - 我们不想要的我们不能限制它,例如使用IP地址,因为请求来自客户端。我们想为客户/管理网站提供一些资源,为自己的REST API客户端提供一些资源,为两者提供一些资源,但是根据AngularJS的JS请求原则(和资源URL可见性),它无法完成( ?)。

这个问题的最佳做法是什么?

1 个答案:

答案 0 :(得分:1)

注意:您的REST资源应始终是安全的。你永远不应该依赖任何客户端的JavaScript代码。如果您的安全性被破坏,因为某人知道 REST api的URI;某事非常错误

Angular可以模块化,这样客户只能看到客户模块,管理员才能看到客户和管理员模块。通过这种方式,您可以让管理员在WYSIWYG环境中进行游戏,而无需在网站之间来回切换。

// Customers.js
// Module only containing customer code
angular.module('myCustomerProducts', ['myMainApp']);

// Administrators.js
// Module only containing administrator code
angular.module('myEditCustomerProducts', ['myCustomerProducts', 'myMainApp']);

由于您的网站已经为管理员和客户分开,因此您只需包含和部署指定目标网站的JavaScript代码即可。如果不是这种情况,您将需要一些服务器端转换(例如,ASP.NET,PHP,Jade,...),以根据用户的凭据动态构建index.html。 根据托管平台,当您从管理员网站(区域)请求任何内容时,您也可以拒绝访问不在管理员组中的所有人。

但又一次;服务器端安全性更有价值。您无法使用javascript(在客户端)保护不安全的服务器。