Angularjs 在响应选项卡上可以看到访问令牌

Angularjs 在响应选项卡上可以看到访问令牌,angularjs,asp.net-web-api,Angularjs,Asp.net Web Api,我正在用angularjs实现一个Web API。我可以毫不费力地运行它并得到我想要的东西。唯一的事情是,我可以在“网络”选项卡的“响应”选项卡中看到我的“访问令牌”。虽然它是加密的,但我能看到它。我的问题是: 1.安全吗? 2.如果这不是一个好的做法,我如何隐藏它? 3.当我复制这个“访问令牌”并将其放在“邮递员”应用程序中时,我实际上可以得到身份验证。我该怎么做才能避免这种情况 从服务器获取令牌 myApp.factory('accountService', [ '$http', '

我正在用angularjs实现一个Web API。我可以毫不费力地运行它并得到我想要的东西。唯一的事情是,我可以在“网络”选项卡的“响应”选项卡中看到我的“访问令牌”。虽然它是加密的,但我能看到它。我的问题是: 1.安全吗? 2.如果这不是一个好的做法,我如何隐藏它? 3.当我复制这个“访问令牌”并将其放在“邮递员”应用程序中时,我实际上可以得到身份验证。我该怎么做才能避免这种情况

从服务器获取令牌

myApp.factory('accountService', [
    '$http', '$q', 'serviceBasePath', 'userService', function($http, $q, serviceBasePath, userService) {
        var fac = {};
        fac.login = function(user) {
            var obj = { 'username': user.username, 'password': user.password, 'grant_type': 'password' };
            Object.toparams = function ObjectsToParams(obj) {
                var p = [];
                for (var key in obj) {
                    p.push(key + '=' + encodeURIComponent(obj[key]));
                }
                return p.join('&');
            }

            var defer = $q.defer();
            $http({
                method: 'post',
                url: serviceBasePath + "/token",
                data: Object.toparams(obj),
                headers: { 'Content-Type': 'application/x-www-form-urlencoded' }
            }).then(function(response) {
                userService.SetCurrentUser(response.data);
                defer.resolve(response.data);
            }, function(error) {
                defer.reject(error.data);
            });
            return defer.promise;
        }
    fac.logout = function() {
        userService.CurrentUser = null;
        userService.SetCurrentUser(userService.CurrentUser);
    }
    return fac;
}
]);
设置并获取令牌

myApp.factory('userService', function () {
    var fac = {};
    fac.CurrentUser = null;
    fac.SetCurrentUser = function (user) {
        fac.CurrentUser = user;
        sessionStorage.user = angular.toJson(user);
    }

    fac.GetCurrentUser = function () {
        fac.CurrentUser = angular.fromJson(sessionStorage.user);
        return fac.CurrentUser;
    }
    return fac;
});

这是无法避免的。同样,您可以在任何网站上使用身份验证cookie,并使用邮递员作为您的用户呼叫该网站

如果您将令牌发送到浏览器,则用户可以获取它


您需要确保在服务器端检查用户是否有权限执行他们尝试执行的操作。那么,用户是否使用令牌并手动拨打电话就无关紧要了,因为他们唯一能做的就是通过应用程序可以正常完成的事情。

为了安全起见,请执行以下操作:

确保访问令牌cookie是安全cookie

确保访问令牌cookie是仅限HTTPS的cookie

您的服务器prob也有一个密钥来解码cookie。确保它是私有的(不要把它放在公共回购协议上)

确保您了解授权(401如果未授权)和认证(403如果未认证)之间的区别。这里的基本区别是,未经授权将不允许您进入。然而,身份验证只允许某些用户访问某些服务器端点


e、 g.组1中的用户可能能够获取数据,但不能发布新数据。如果他们试图发帖,他们会得到403分。group2中的用户可以发布自己的心形内容。

看一看,谢谢链接,但我认为它没有解决我的问题。我实际上从中得到的唯一信息是设置访问令牌的有效时间,我实际上是通过将其设置为1天来完成的(虽然不是在我的代码中,但我确实设置了它)。它是什么类型的令牌?哦!所以基本上我所能做的就是使用“最小特权”,因为没有办法隐藏“访问令牌”。你说“访问令牌cookie是安全cookie”是什么意思?访问令牌实际上是加密的,但问题是;有人可以打开开发者标签,复制访问令牌,打开邮递员,将其粘贴到标题中,然后他们将被验证。我已经在用401和403了。我只想隐藏“访问令牌”所以他们不能用它来复制粘贴到postman或其他类似的应用程序上。他们可以复制粘贴它是没有问题的——他们是授权用户,因为他们有一个有效的访问令牌——只要确保你每隔一段时间就让它过期一次——安全的cookie意味着JavaScript无法访问它,以至于页面上运行的脚本无法访问它无法读取它,它只能在服务器请求中发送,由服务器使用set Cookie response Header设置。但是这种情况如何:“合法用户”登录,执行授权的有效操作,如搜索、插入、更新和删除,关闭浏览器而不注销,然后出于某种原因离开办公桌。“Mr_X”打开浏览器,按“f12”,复制“访问令牌”,使用邮递员,然后使用“合法用户”的访问权限?如果你真的担心,你会对他们从访问令牌内部访问的ip进行编码,因此如果x先生试图从另一个ip访问,它将失败-你需要解码并验证ip服务器端-我明白了,杀戮过度。最后一件事。。我的“访问令牌”是否可以在另一台pc上使用?