阻止访问AngularJS中的管理页面

时间:2013-09-22 12:22:05

标签: angularjs node.js security express passport.js

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

我正在使用Express,PassportJS& MongoDB(猫鼬)作为我的后端。当然,他们无法与管理页面进行交互,因为在创建,删除时都有服务器端身份验证......但我更倾向于甚至不向用户提供页面,如果他们没有适当的访问。由于该应用程序完全是客户端JS,我认为这是不可能的,因为人们可以只修改路由和诸如此类的东西。最好的方法是什么?感谢您的任何意见!

6 个答案:

答案 0 :(得分: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: '/'
});

答案 1 :(得分:2)

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

答案 2 :(得分:0)

为什么你会更喜欢"不向非管理员用户提供这些页面?你是否真的有理由关心这一点,除了某种本能,你应该阻止人们看到他们没有"假设"看?

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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

您可以在params https://github.com/angular-ui/ui-router/tree/master

中使用ui-router

答案 5 :(得分:-1)

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