2017-09-25 75 views
2

我正在開發使用春季啓動1.5.7作爲後端和網站角2爲前端。 我是這兩種技術的新手,這是我第一次嘗試開發一個網站。所以我對很多事情感到困惑。Securirty:Java的春季啓動+角2 +智威湯遜

我已通過JWT實施了用戶驗證。 當通過證書用戶登錄,後臺對其進行驗證,然後創建一個JWT,並返回給前端:令牌被添加到標題是這樣的:

Authorization - Bearer <jwt token> 

在前端我如果該項檢查在帖子回覆中。如果它在那裏,我將它和用戶名一起添加到localStorage

private authUrl = 'http://localhost:8080/login'; 
private headers = new Headers({ 
    'Content-Type': 'application/json', 
    'Accept': 'application/json' 
}); 

constructor(private http: Http) { } 

login(username: string, password: string): Observable<void> { 
    let loginRequest = JSON.stringify({ username: username, password: password }); 

    return this.http.post(this.authUrl, loginRequest, { headers: this.headers }) 
     .map((response: Response) => { 
      let token = response.headers.get('Authorization'); 
      // If token is not null, empty or undefined. 
      if (token) { 
       localStorage.setItem('jwt', JSON.stringify({ username: username, token: token })); 
      } 
     }); 
} 

當用戶登錄時,他每次訪問受保護的資源,令牌將從localStorage的檢索和發送回後端進行驗證。 整件事情奏效。智威湯遜是免疫的CSRF,這樣我就可以禁用,在後端,

@Override 
protected void configure(HttpSecurity http) throws Exception { 
    http.csrf().disable() 
    ... 

,但我已閱讀(例如,here)有使用本地存儲時的漏洞。

特別是localStorage可以通過JavaScript訪問同一個域,暴露於XSS攻擊。 解決它似乎我可以使用JWT Cookie。正如之前的鏈接所寫,我可以設置HttpOnly cookie標誌以避免通過JavaScript訪問Cookie。

但是,使用Cookie我現在很容易受到CRSF攻擊。

現在,here,我已閱讀Angular 2+提供內置,默認情況下啓用,反XSS。

所以問題是。我應該使用localStorage,並使用嵌入式Angular 2反XSS功能,或者這還不夠,然後我應該將Cookie存儲在JWT上以獲得針對XSS攻擊的保護,然後使用Spring在其上實現某種CRSF保護後端啓動配置?

謝謝

編輯:網站是一種購物車。用戶可以查看幾乎所有 頁面,但要他需要登錄。

回答

1

在角度你可以拿着你的令牌服務,並使用它時,曾經要求它。類似於角度爲java的pojo,您可以使用getter和setter創建角度服務來保存令牌。將該服務提供給該模塊,並將在所有componentdirectives中提供。

令牌將在內存中,而應用程序在瀏覽器中打開並存儲在瀏覽器中。

我會說使用一個observable/Subject類型的變量,以便它將等待,直到從服務器提取令牌並使用它來做東西。

1

Aniruddha Das方法很好,但如果用戶刷新瀏覽器,客戶端應用程序將丟失標記,因爲DOM將重新加載瀏覽器刷新,並且包括令牌在內的所有內存數據都將丟失。

現在回到你的approach-

  1. 本地存儲 - 使用這種方法和應用將是無狀態的CSRF攻擊是不可能的,但很容易產生XSS攻擊。默認情況下,Angular做輸出編碼以防止XSS攻擊,但風險仍然存在於服務器端Angular模板中。爲了緩解XSS攻擊,如果存在一些敏感信息,可以縮短令牌到期時間並對其進行加密。
  2. Cookie方法 - HTTP cookie將緩解XSS攻擊,但您必須實施CSRF保護。您必須使用API​​網關模式來使應用程序無狀態。

兩種方法都有prons/cons,你必須根據你的應用選擇。如果您的應用程序與金融領域相關,那麼我會建議您使用基於Cookie的方法。

+0

謝謝你的回答。我編輯了這個問題;我的網站將是一個有點購物車。在這種情況下,更好地遵循#2接近? – Shaunyl