Angularjs Angular Js安全问题基于角色的授权

Angularjs Angular Js安全问题基于角色的授权,angularjs,security,authorization,user-roles,client-side-scripting,Angularjs,Security,Authorization,User Roles,Client Side Scripting,我正在为我的公司创建一个新的企业应用程序。我对这个角色很兴奋,但在客户端处理角色对我来说并不合适 基本上,我是在用户登录时保存令牌,在用户可以查看页面之前,会向服务器发送授权请求,以获取基于令牌的角色和用户详细信息 授权后,向服务器请求获取页面数据,服务器返回整个数据,而不考虑用户的角色,之后我使用ng开关并根据角色呈现模板 现在的问题是,我试图在客户端显示和隐藏数据,因此在收到用户信息后,我必须将角色保留在客户端的某个范围变量或本地存储中。但我的观点是,如果我把它放在客户端,我可以很容易地改变

我正在为我的公司创建一个新的企业应用程序。我对这个角色很兴奋,但在客户端处理角色对我来说并不合适

基本上,我是在用户登录时保存令牌,在用户可以查看页面之前,会向服务器发送授权请求,以获取基于令牌的角色和用户详细信息

授权后,向服务器请求获取页面数据,服务器返回整个数据,而不考虑用户的角色,之后我使用ng开关并根据角色呈现模板

现在的问题是,我试图在客户端显示和隐藏数据,因此在收到用户信息后,我必须将角色保留在客户端的某个范围变量或本地存储中。但我的观点是,如果我把它放在客户端,我可以很容易地改变角色并访问我想要的任何数据

所以我应该假设Angular不适合我的应用程序,因为我试图根据服务器的角色在客户端显示数据,因为我觉得如果用户可以看到您的逻辑和数据,他显然可以使用它

这是我的观点

   <div ng-switch="User.data.Role">
       <div ng-switch-when="Admin">
            <h1>hello you are seeing your dashboard Admin</h1>
        </div>

        <div ng-switch-when="Manager">
            <h1>hello you are seeing your dashboard Manager</h1>
        </div>
    </div>
这是服务方法

   var _fillAuthData = function () {

        var authData = SessionService.get('user');

        if (authData) {
            _authentication.isAuth = true;
            _authentication.data = authData;

        }

        console.log(_authentication);
        return _authentication;
    }
会话服务基于令牌从服务器获取用户数据。 正如您所看到的,由于视图是如此具有描述性,因此更改authData中的角色并不是什么大问题


请帮助我,如果有一个这样的解决办法。我真的很想在Angular中创建此项目。

如果web服务(在服务器上运行)将未经身份验证的用户授权访问的数据返回给客户端,则web服务(服务器端)存在安全漏洞。无论您决定选择哪个客户端框架,都无法修复该客户端/浏览器端。AngularJS可能适合您在浏览器中执行任何操作,但您的web服务已损坏。

我同意nomve的观点,这里服务器端的安全不是问题。服务器端的安全性应该始终是安全性的最后关口,并且应该非常小心地实施

然而,能够在客户端破解角色并查看用户不应该看到的界面,即使没有从服务器提取数据,也不是最好的体验


每次远程检查角色并且不在本地存储角色可以解决此问题,但成本很高。是否有一种本机方法可以加密角色信息并使客户端的角色更难破解?

一般来说,服务应该只发送用户有权查看的数据。换句话说,,安全应该由服务而不是客户端来处理。感谢您的及时响应。但是我们尝试发送未经授权的数据的唯一原因是因为我们不希望在服务器上执行所有繁重的操作,而是希望在客户端执行所有繁重的操作,以便我们的API具有更通用的功能方法花费的时间更少,因为呈现JSON比进行数据库调用更快。您认为使用相同的API逻辑在asp.net中创建带有knockout和MVC的应用程序会更高效吗?如果您提到的web服务器的API逻辑有安全缺陷,然后切换到另一个浏览器端框架将无法修复它。一个好的浏览器调试器甚至会向您显示网络响应(服务器返回的明文JSON),包括您希望隐藏的数据(例如,Chrome->network tab中的CTRL+SHIFT+J)。我认为这个问题在这种情况下是有效的,因为它与角色有关。服务器是否返回不应该返回的数据并不重要。即使不是这样,如果您在模板中使用角色来表示“如果用户是管理员,则会显示”,那么很容易操纵自己成为管理员并查看管理员看到的内容。当然,问题是,如果数据丢失,那会是什么。但无论如何,我对此感到不安。
   var _fillAuthData = function () {

        var authData = SessionService.get('user');

        if (authData) {
            _authentication.isAuth = true;
            _authentication.data = authData;

        }

        console.log(_authentication);
        return _authentication;
    }