【问题标题】:AngularJS Access Token Security ConcernsAngularJS 访问令牌安全问题
【发布时间】:2014-10-30 17:31:33
【问题描述】:

从授权服务器检索访问令牌后,在 AngularJS 中存储访问令牌的最佳做法是什么?我看到了很多使用 localStorage 服务的建议,但后来我阅读了其他帖子/博客说永远不要使用 localStorage 来存储令牌,它不安全等等。

由于上述混合信息,我很难用 Angular 来解决安全问题。

【问题讨论】:

  • 您有哪些链接表明本地存储不是一个好主意?
  • 我手边没有它们,但会再次挖掘它们。我熟悉您和 Dominick 的工作,并且很想听听您对将其存储在本地存储中的意见。这是你会推荐的东西吗?
  • 我认为本地存储很好,只要您知道它是如何工作的。从某种意义上说,它与您用于网站登录的持久性 cookie 没有什么不同。

标签: angularjs oauth thinktecture-ident-server


【解决方案1】:

我认为,

  1. 生成令牌(服务器端的敏感信息)
  2. 使用只有服务器知道的机器密钥对生成的令牌进行签名和加密。并获取加密令牌。
  3. 然后将第2步获得的加密令牌保存在cookies中。
  4. Cookie 的过期时间应该非常少。制作 httponly cookie。

验证 cookie 时

  1. 验证 cookie
  2. 使用机器密钥解密并验证它仅由我们的服务器发送并使用相同的 crc。
  3. 如果上面的第2步是好的,则对获得的令牌进行身份验证。

Angularjs 自动在每个 $http 请求中添加 headers,

AngularAppFactory.GetApp=function(appName){
    var app = angular.module(appName,  []);

    app.factory('httpRequestInterceptor', ['$rootScope', function($rootScope)
    {
        return {
            request: function($config) {
             if( $rootScope.user.authToken )
             {
              $config.headers['id'] = $rootScope.user.id;
               $config.headers['auth-token'] = $rootScope.user.authToken;
             }

             return $config;
        }
    };
    }]);

    app.config(function ($httpProvider) {
      $httpProvider.interceptors.push('httpRequestInterceptor');
    });

    return app;
}



//Whenever you need to get new angular app, you can call this function.
app = AngularAppFactory.GetApp('appName');

【讨论】:

  • 我正在尝试这样做。我缺少一些实现细节。我有一个 asp.net mvc 应用程序,它只处理登录逻辑、设置身份验证 cookie,然后重定向到 angular 应用程序。登录逻辑涉及在不同服务器上的 Web api 上调用令牌端点。当我取回它时,我将该令牌存储在 cookie 中。但是,如何在不手动将其放入授权标头的情况下将该令牌从 Angular 发送回 webapi?
猜你喜欢
  • 2017-08-28
  • 2012-10-22
  • 2012-09-11
  • 1970-01-01
  • 2018-10-16
  • 1970-01-01
  • 2015-11-16
  • 2011-11-15
  • 2014-12-11
相关资源
最近更新 更多