AngularJS访问令牌安全问题

use*_*575 7 oauth angularjs thinktecture-ident-server

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

由于上面的混合信息,我很难用Angular包围安全性.

Gan*_*ade 1

我认为,

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

验证cookie时

  1. 验证cookie
  2. 使用机器密钥解密并验证它仅由我们的服务器发送且具有相同的 crc。
  3. 如果上面的步骤2正常的话,验证获得的token。

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

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');
Run Code Online (Sandbox Code Playgroud)