8

我想知道 AngularJS 中最好的方法是保护管理页面,即普通用户不应该看到的页面。显然,会有后端身份验证,但由于 AngularJS 应用程序是客户端,理论上人们仍然可以查看路由并直接访问这些 URL 并查看管理页面。

我使用 Express、PassportJS 和 MongoDB (Mongoose) 作为我的后端。自然,他们将无法与管理页面交互,因为在创建、删除时存在服务器端身份验证......但如果他们没有适当的访问。由于该应用程序完全是客户端 JS,我认为这是不可能的,因为人们可以修改路由等等。解决这个问题的最佳方法是什么?感谢您的任何意见!

4

6 回答 6

4

我会在 routeProvider 中进行检查。这必须对每条需要身份验证的路由进行。您甚至可以编写一个单独的方法并将其粘贴到每条路线上以避免重复。

$routeProvider
.when('/profile', {
  templateUrl: 'views/profile.html',
  controller: 'ProfileCtrl',
  resolve: {
    validate: function($q, $location) {
      // Either you could maintain an array of hashes on client side
      // a user do not have access to without login
      // Or hit the backend url to check it more securely
      var validateAccess = $q.defer();
      var isAllowed = ['profile', 'index', 'dashboard'].indexOf($location.hash()) !== -1;

      if (!isAllowed) {
        $location.path('/login');
      }

      validateAccess.resolve();
      return validateAccess.promise;
    }
  }
})
.otherwise({
  redirectTo: '/'
});
于 2013-09-22T14:12:40.240 回答
2

这个问题有点老了,但如果有人正在寻找解决方案,我使用资源文件来存储我的 html 模板,然后在验证权限时使用 webapi 检索它,并仅在用户通过身份验证时返回 html。

于 2014-05-12T12:07:23.573 回答
0

为什么您“更愿意”不将这些页面提供给非管理员用户?除了一些你应该阻止人们看到他们“不应该”看到的东西的本能之外,你是否有真正的理由关心这一点?

如果您的安全配置正确,那么非管理员用户将无法访问管理员数据或执行管理员操作。这就是您应该关注的内容,而不是发明复杂的方法来阻止他们看到他们无论如何都无法使用的管理屏幕。你花在这上面的任何时间基本上都是浪费时间,你应该把它花在更重要的事情上。

于 2013-09-22T13:59:46.767 回答
0

我的做法是,将 angularJS html 放入 JSP 页面并检查会话。如果会话验证提供访问权限。我不确定这是否是正确的方法。另一种方法是,不使用 JSP,但每次 API 命中时,检查服务器上的会话,否则返回 false。另一种方法是在第一次登录时,获取自动生成的密钥,存储在服务器和客户端,检查每个 API 命中。

于 2015-10-12T13:42:08.593 回答
0

您可以paramsui-router https://github.com/angular-ui/ui-router/tree/master中使用

于 2016-02-13T13:03:50.830 回答
-1

我同意 Chris Russo 的担忧。这都是关于安全问题的。如果您在前端使用 Angular,那么如果有人试图攻击您的网站/应用程序,您需要一个能够保护您的应用程序的强大功能的框架。我会推荐 spring 框架(spring_security),它已经证明了保护你的 web 应用程序的功能。您需要为每个用户分配角色,例如 ROLE_USER 或 ROLE_ADMIN。我不会详细介绍如何做到这一点,但这将有助于解决您的疑虑。:)

于 2014-06-17T14:02:47.187 回答