2015-09-25 38 views
4

我的基於AngularJS的應用程序旨在使用localStorage來保存身份驗證後從後端返回的JWT身份驗證令牌。對於進入後端的每個請求(POST,GET等),應用程序都使用攔截器將標記附加到後端。這個過程一直很好,直到我遇到了以下問題:Angular中的身份驗證:處理新標籤頁或新瀏覽器窗口

  1. 我的經理不允許使用localStorage保存的用戶名和智威湯遜身份驗證令牌,因爲他們會在瀏覽器堅持,除非他/她故意註銷的應用程序(它從localStorage清除緩存)。如果用戶關閉瀏覽器而不註銷,則緩存將保留在localStorage中。

  2. 因爲問題1,我切換到使用sessionStorage來存儲用戶名和JWT身份驗證令牌來代替,不過,這將導致更多的問題,當用戶右擊某個鏈接在新選項卡或新瀏覽器中打開應用程序窗口。在新的選項卡/窗口中,應用程序無法看到用戶已通過身份驗證,而到後端的請求被拒絕(401 error),因爲應用程序無法在新選項卡/窗口的sessionStorage中找到JWT身份驗證令牌。

  3. 如果我將用戶名和JWT授權令牌作爲變量緩存在JavaScript代碼中,那麼如果用戶刷新瀏覽器,應用程序將丟失它們。

所以這些都是我在使用JWT授權令牌時的兩難處境。有沒有更好的解決方案來處理需求:不使用localStorage,應用程序應該在新選項卡或新瀏覽器窗口中繼續使用相同的身份驗證JWT令牌。謝謝!

+0

也許是餅乾? – CollinD

+0

在這個https://stormpath.com/blog/where-to-store-your-jwts-cookies-vs-html5-web-storage/ –

+0

有一個屠夫我有完全相同的問題。 @TonyGW你找到了一個好的解決方案? – goflo

回答

-1

這是更多的角度/服務器設置的設計缺陷,然後是一個簡單的令牌問題。

通常,當用戶在新窗口/選項卡中打開一個鏈接來啓動一個乾淨的新會話時。該URL會指向需要身份驗證的內容,並且由於這是新會話,角度應用程序應該嘗試恢復它。或者用戶使用登錄,請記住我已啓用,否則系統將提示您輸入用戶名/密碼。在成功驗證用戶身份之後,URL應該通過重定向進行恢復。

所以它的工作原理是這樣的。

http://example.com/page1 <-- user uses ctrl+click to open new tab 
http://example.com/page2 <-- user doesn't have session 
http://example.com/signin?url=/page2 <-- redirect to sign in with return path 
http://example.com/page2 <-- user session restored after sign in 

的登入一步可以跳過機智的記得我功能被用戶啓用。

將會話令牌存儲在localStorage中與沒有會話相同。由於在瀏覽器重新啓動時令牌將被恢復。那有什麼安全性?

+0

所以你建議繼續使用localStorage?這就是我一直在想的,但經理不喜歡持久性。 – TonyGW

+0

@TonyGW不,我是說**不是**將令牌放在localStorage中。 – cgTag

相關問題