2014-09-05 155 views
7

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

我很难把头绕过由于像上面这样的混合信息,Angular的安全性。

+0

暗示本地有什么联系你有存储不是一个好主意? – 2014-09-05 22:02:33

+0

我没有他们的方便,但会再次挖掘它们。我熟悉你和Dominick的工作,并且很乐意听到你的意见,将它存储在本地存储中。这是你会推荐的吗? – user3410575 2014-09-05 23:05:58

+1

我认为本地存储是好的,只要你知道它是如何工作的。从某种意义上说,它与用于网站登录的永久性cookie没什么区别。 – 2014-09-11 04:04:55

回答

1

我认为,

  1. 生成令牌(在服务器端敏感信息)
  2. 签名和加密与只被服务器计算机密钥生成令牌。并获得加密的令牌。
  3. 然后将在步骤2获得的加密令牌保存在cookie中。
  4. Cookies过期应该非常少。使httponly cookie。

当验证cookie的

  1. 验证cookie的
  2. 解密用计算机密钥并验证它仅由我们的服务器,并使用相同的CRC发送。
  3. 如果上面的step2是好的,则验证获得的令牌。

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'); 
+0

我正在努力做到这一点。我缺少一些实现细节。我有一个asp.net mvc应用程序,它只处理登录逻辑,设置一个auth cookie,然后重定向到角度应用程序。登录逻辑涉及在不同服务器上的Web API上调用令牌端点。当我回来时,我将该标记存储在cookie中。但是,如何从角度将该令牌发送回webapi,而无需将其手动放入授权头中? – user3410575 2014-09-05 20:19:17