2014-09-05 158 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