3

免责声明:我不是真正的开发人员,我只是喜欢不时编写一些代码:)

最近我大致了解了 AngularJS 和浏览器端 MVC 框架,并决定使用它。大多数 Angular 文档都没有详细讨论服务器端的事情,这让用户可以自由选择。在阅读了 Angular 的$resource服务之后,我了解了像 MongoDB 和 CouchDB 这样的数据库,它们自己公开了一个 RESTful 接口。这带来了一个明显的问题——你如何保护这些东西?

在“传统”的 Web 应用程序中,服务器端会有一个层,负责对用户进行身份验证并授权他们访问数据。一旦完成,服务器端代码将使用固定的凭据集(相同,无论 webapp 用户身份如何)与底层数据存储(例如 RDBMS)对话。我当然可以复制这个模型并编写一些 CRUD 代码,这些代码将公开一个 REST 接口并表现类似。如果我想使用$resource,我需要将 webapp 用户绑定到一些db用户吗?我不能使用一组通用的凭据,因为它们在代码中是可见的——看起来它正在编写一个中间层,或者将一组用户绑定到另一组。

我很好奇这个问题通常是如何解决的——正如你所看到的,我有一些想法。由于我缺乏经验,我只是对这里的最佳实践感到好奇 :) 一般来说,这可能是一个更广泛的问题:鉴于您不应该信任客户端运行的代码,您如何处理事情像表单验证和其他类似“授权”的逻辑?

tl;dr:您如何保护 RESTful 数据库访问?您如何保护您的应用程序逻辑?

4

3 回答 3

3

通常,您的前端将与之通信的 RESTful API 将是您自己的实现。它将对用户进行身份验证和授权,并在将数据存储到数据库之前对其进行验证。

一些表单验证可以在客户端完成,但我更喜欢在后端进行数据验证,而不是仅仅信任客户端数据。

于 2013-02-28T11:20:12.823 回答
0

简短的回答可能是一个 cookie。

当用户进行身份验证时,您将其中一些身份验证详细信息放入 cookie。它可能只是一个会话 ID 或更有意义的东西。不管它是什么,一定要加密它。然后,当发送 REST 请求时,cookie 会随请求一起传递。

服务器端 Web 过滤器将拦截请求,确保请求经过身份验证和授权,然后在一切正常的情况下继续。

于 2013-04-15T15:46:36.473 回答
0

如果我理解正确的问题,答案是:首先你应该这样做是为了保护你的后端休息电话。设置服务器安全后,您应该保护您的 ui 页面,但对于知道如何在 chrome 中使用开发工具的人来说,这并不是真正的安全措施绑定控制器和 ui 页面,还解析器来检查访问。简而言之,您可以执行以下操作:

.service("AuthService", function() {
  var data = {};
  data.checkAuth = function() {return true;}
  return data;
})

.when("/news", {
    templateUrl: "newsView.html",
    controller: "newsController",
    resolve: {
        checkAuth: function(AuthService){
            return AuthService.checkAuth();
        }
    }
})

controller("newsController", function ($scope, checkAuth) {
    $scope.isAuthenticated = checkAuth;
});

希望能帮助到你。

于 2015-04-22T14:06:12.203 回答